在Debian 9 Stretch上安装ZFS


11

我试图在debian 9.1上安装zfs,但是遇到一些错误。

我的第一个安装仅是zfs-dkms,但是我在网上阅读到,运行zfs-dkms还需要spl-dkms。


我的步骤是更改我的sources.list,添加非免费贡献,如下所示:

/etc/apt/sources.list

deb http://ftp.nl.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.nl.debian.org/debian/ stretch main contrib non-free

deb http://security.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free

# stretch-updates, previously known as 'volatile'
deb http://ftp.nl.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://ftp.nl.debian.org/debian/ stretch-updates main contrib non-free

完成经典的apt-get更新,然后尝试使用以下命令安装zfs:

apt-get install spl-dkms

而且只有在

apt-get install zfs-dkms

结果,我有这些错误:

root@debian:/etc/apt# apt-get install zfs-dkms
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libnvpair1linux libuutil1linux libzfs2linux libzpool2linux zfs-zed zfsutils-linux

...

DKMS: install completed.
Setting up libzpool2linux (0.6.5.9-5) ...
Setting up libzfs2linux (0.6.5.9-5) ...
Setting up zfsutils-linux (0.6.5.9-5) ...
Created symlink /etc/systemd/system/zfs-mount.service.wants/zfs-import-cache.service â /lib/systemd/system/zfs-import-cac
Created symlink /etc/systemd/system/zfs.target.wants/zfs-import-cache.service â /lib/systemd/system/zfs-import-cache.serv
Created symlink /etc/systemd/system/zfs-share.service.wants/zfs-mount.service â /lib/systemd/system/zfs-mount.service.
Created symlink /etc/systemd/system/zfs.target.wants/zfs-mount.service â /lib/systemd/system/zfs-mount.service.
Created symlink /etc/systemd/system/zfs.target.wants/zfs-share.service â /lib/systemd/system/zfs-share.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zfs.target â /lib/systemd/system/zfs.target.
zfs-import-scan.service is a disabled or a static unit, not starting it.
Job for zfs-mount.service failed because the control process exited with error code.
See "systemctl status zfs-mount.service" and "journalctl -xe" for details.
zfs-mount.service couldn't start.
Job for zfs-share.service failed because the control process exited with error code.
See "systemctl status zfs-share.service" and "journalctl -xe" for details.
zfs-share.service couldn't start.
Setting up zfs-zed (0.6.5.9-5) ...
Created symlink /etc/systemd/system/zed.service â /lib/systemd/system/zfs-zed.service.
Created symlink /etc/systemd/system/zfs.target.wants/zfs-zed.service â /lib/systemd/system/zfs-zed.service.
Processing triggers for libc-bin (2.24-11+deb9u1) ...

按照建议阅读journalctl -xe我得到:

root@debian:/etc/apt# journalctl -xe
Aug 02 23:13:13 debian systemd[1]: zfs-share.service: Main process exited, code=exited, status=1/FAILURE
Aug 02 23:13:13 debian systemd[1]: Failed to start ZFS file system shares.
-- Subject: Unit zfs-share.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit zfs-share.service has failed.
--
-- The result is failed.
Aug 02 23:13:13 debian systemd[1]: zfs-share.service: Unit entered failed state.
Aug 02 23:13:13 debian systemd[1]: zfs-share.service: Failed with result 'exit-code'.
Aug 02 23:13:13 debian systemd[1]: Starting Mount ZFS filesystems...
-- Subject: Unit zfs-mount.service has begun start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit zfs-mount.service has begun starting up.
Aug 02 23:13:13 debian zfs[81481]: The ZFS modules are not loaded.
Aug 02 23:13:13 debian zfs[81481]: Try running '/sbin/modprobe zfs' as root to load them.
Aug 02 23:13:13 debian systemd[1]: zfs-mount.service: Main process exited, code=exited, status=1/FAILURE
Aug 02 23:13:13 debian systemd[1]: Failed to start Mount ZFS filesystems.
-- Subject: Unit zfs-mount.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit zfs-mount.service has failed.
--
-- The result is failed.
Aug 02 23:13:13 debian systemd[1]: zfs-mount.service: Unit entered failed state.
Aug 02 23:13:13 debian systemd[1]: zfs-mount.service: Failed with result 'exit-code'.
Aug 02 23:13:13 debian systemd[1]: Starting ZFS file system shares...
-- Subject: Unit zfs-share.service has begun start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit zfs-share.service has begun starting up.
Aug 02 23:13:13 debian systemd[81483]: zfs-share.service: Failed at step EXEC spawning /usr/bin/rm: No such file or direc
-- Subject: Process /usr/bin/rm could not be executed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The process /usr/bin/rm could not be executed and failed.
--
-- The error number returned by this process is 2.

怎么了 我想念其他东西吗?该如何ZFS Linux的包有关ZFS安装?

在debian 9中安装zfs的正确方法是什么?


输出是dkms status | grep zfs什么?
GAD3R

Answers:


9

@cas的实际答案是好的,但需要进行一些更正。

因此,让我们重新安装Debian 9,并假设未启用contrib非免费存储库。


步骤0-启用contrib非自由存储库

我用sed查找和替换的单词/etc/apt/sources.list

sed -i 's/main/main contrib non-free/g' /etc/apt/sources.list

apt-get update

步骤1-ZFS安装

由于上次修复spl-dkms正确地视为zfs-dkms依赖项,因此会自动调用它,因此无需在之前手动安装它zfs-dkms。由于Debian的zfs发行版内部存在错误,因此无法找到rm正确位置的二进制文件,因此需要符号链接。

apt -y install linux-headers-$(uname -r)

ln -s /bin/rm /usr/bin/rm

apt-get -y install zfs-dkms

步骤2-ZFS重新启动

至此,已经安装了zfs-dkms,但是它在中抛出错误journalctl -xe。要启动zfs正确使用:

/sbin/modprobe zfs

systemctl restart zfs-import-cache
systemctl restart zfs-import-scan
systemctl restart zfs-mount
systemctl restart zfs-share

第3步-您必须创建至少一个ZPOOL

此时,我发现您必须在重新启动之前创建一个zpool,否则,如果没有zpool, zfs将无法加载适当的模块。这是一种节省资源的机制(但是即使那样,它仍然会在内部抛出错误journalctl -xe

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864348

“我们没有这样做,因为ZFS模块会污染内核,如果没有可用的zpool,则不应加载它。”

如果您错过了这一部分,则必须从第2步开始

例如,通过使用@cas提供的示例,您可以创建基于文件的zpool或直接创建基于磁盘的zpool。

truncate -s 100M /root/z1
truncate -s 100M /root/z2
zpool create tank /root/z1 /root/z2
zpool scrub tank
zpool status

然后reboot一切都将正常工作journalctl -xe


3

在Debian 9.4上对我来说略有变化-在Apt来源添加之后:

apt-get install linux-headers-amd64       # not tied to specific kernel version
apt-get install zfs-dkms zfsutils-linux   # my apt recommends is off

lsblk                                     # double-check which disks to pool

zpool create -f jeff -o ashift=12 -o autoexpand=on -o autoreplace=on mirror sdb sdd
zfs set mountpoint=/var/jeff jeff
zfs set compression=lz4 jeff
zfs create jeff/blog
zfs create jeff/docs
zfs create jeff/pics
zfs set compression=off jeff/pics

df -h

坐骑没有叹息-发现存在/var/jeff内容-将其移开并做了reboot...

重新启动后:

df -htzfs
Filesystem        Size  Used Avail Use% Mounted on
jeff              849G  128K  849G   1% /var/jeff
jeff/blog         850G  128K  849G   1% /var/jeff/blog
jeff/docs         856G  128K  849G   1% /var/jeff/docs
jeff/pics         850G  128K  849G   1% /var/jeff/pics

万岁 -所有存在且受位腐烂的:)


+1,但强烈建议您使用/dev/disk/by-id/?而不是/dev/sd?设备。创建池时,请使用by-id名称,或者稍后使用zpool export <pool>进行修复zpool import -d /dev/disk/by-id/ <pool>。这些名称与/ dev / sd *不同,将在重新启动后保持不变。另外,如果您有标签打印机,则可以使用短版本的by-id设备名称(通常是名称的序列号部分构成一个好的,简短的,唯一的标签)来打印标签,并在驱动器上贴上标签易于确定是否需要更换。
cas

嗯-但是ZFS不在乎创建过程中使用的磁盘别名-所有信息都写到磁盘上的zfs-part9中-这就是用来构造阵列的内容。我真的不在乎将来是否会将/ dev / sdb更改为其他内容,并且我始终会lsblk -f在使用驱动器硬件进行检查之前进行检查-对于我们的生产服务器,Dell HDD闪烁工具可用于关联当前操作系统,物理单元的别名:)-我认为/ dev / disk / by-id对于其他没有ZFS内置一致性的挂载系统(例如fstab)更有用。
杰夫

使用by-id会在和之类的zpool命令中为您提供有意义/有用的名称(标识每个驱动器的品牌,型号和序列号),可以轻松地将其复制粘贴到任何必要的zpool offline / detach / replace / etc命令中。 不会告诉您任何有用的信息。 准确识别驱动器类型及其序列号。如果希望使用带有,等的选项,则仍可以获取(当前)简短的开发人员名称(以我的经验,大多数情况下对有用)。statuslistsdaata-ST4000VN008-2DR166_ZDH35XXX-Lzpool listzpool statuszpool list -L -v
cas

IME,有意义的名称有助于减少人为错误。很容易输错,例如将sdd转换为sdf。键入副词名称要困难得多。
cas

大声笑-很多人都提出相同的建议-我个人觉得更容易记住并输入sdc sde sdf和sdg。我们分批购买磁盘,它们都以相同的48个左右id字符开头,并且只有2-4位数字的后缀不同。人们不用键入ID名称-他们使用制表符补全-更有可能导致糟糕的恕我直言。我发现区分3个字符的一个字母比52个字符的名称中的2-4位容易得多。我知道很多人也推荐UUID。由于ZFS不在乎,我认为我会坚持我发现更容易的东西-少有时多:)
Jeff

3

我刚刚创建了一个全新的拉伸VM来进行测试。最小安装(仅ssh和标准系统工具),编辑source.list以添加contrib和non-free,然后:

apt-get install spl-dkms zfs-dkms

您可能还需要手动安装zfsutils-linux。它在安装时应自动安装,zfs-dkms但依赖关系可能因不同的Debian版本和不同版本的Debian ZoL软件包而异:

apt-get install  zfsutils-linux

看来systemd单位文件中存在bug zfs-share。它正在尝试运行/usr/bin/rm而不是/bin/rm

快速解决方案是运行ln -s /bin/rm /usr/bin,或者:

cd /etc/systemd/system
cp -a /lib/systemd/system/zfs-share.service .
edit zfs-share.service and change `/usr/bin/rm` to `/bin/rm`

然后重新启动zfs服务:

systemctl restart zfs-import-cache
systemctl restart zfs-import-scan
systemctl restart zfs-mount
systemctl restart zfs-share

注意:我modprobe zfs在重新启动任何zfs服务之前手动运行。我不确定他们是否会自动执行此操作,因此您可能也需要执行此操作。

顺便说一句,您可能apt-get install zfs-initramfs也想要确保在initramfs期间加载zfs。


我测试了它适用于:

# truncate -s 100M /root/z1
# truncate -s 100M /root/z2
# zpool create tank mirror /root/z1 /root/z2 

# zfs set compression=lz4 tank
# rsync -ax /etc /tank/
# du -sch /etc /tank/etc/
3.5M    /etc
825K    /tank/etc/
4.3M    total

# zpool scrub tank
# zpool status
  pool: tank
 state: ONLINE
  scan: scrub repaired 0 in 0h0m with 0 errors on Thu Aug  3 19:28:21 2017
config:

    NAME          STATE     READ WRITE CKSUM
    tank          ONLINE       0     0     0
      mirror-0    ONLINE       0     0     0
        /root/z1  ONLINE       0     0     0
        /root/z2  ONLINE       0     0     0

errors: No known data errors

zpool正在工作,并且/ tank在重新引导后会自动挂载。

结论:现在可以使用。


顺便说一句,此拉伸VM使用在主sid系统上创建的ZFS zvol 作为其磁盘。如果在首次安装后立即安装快照,然后在安装spl-dkms和zfs-dkms之前制作了快照,那么我可以快速恢复并在出现重大问题时重新开始。

我首先制作了只有1GB的zvol,后来需要增加它来为build-essential,linux-headers-amd64等提供足够的空间:

# zfs list -r -t all export/volumes/stretch
NAME                                         USED  AVAIL  REFER  MOUNTPOINT
export/volumes/stretch                      6.25G   834G  1.77G  -
export/volumes/stretch@2017-08-03-18:31:04   279M      -  1.09G  -

compression=lz4在虚拟机中的tank上进行设置可能比没用更糟糕-zvol已经具有lz4压缩。


我尝试将其安装在新的新vm上,但我仍然遇到问题,我猜..某些服务无法正常启动..到目前为止,我可以看到ZFS DKMS错误列表中充满了“无法安装”错误报告。我想知道是否正常,在apt-get install zfs-dkms这样可重现的许多错误修正请求之后,开发人员就让几个月过去了
。–

在您要求cd目录的部分上,您的意思是:/ etc / systemd / system /?因为/ etc / systemd / service不存在。.我也收到此消息:“无法重新启动zfs-import-mount.service:找不到单元zfs-import-mount.service。” 和“无法重新启动zfs-import-share.service:找不到单元zfs-import-share.service。”
user3450548

通过阅读journalctl -xe,我似乎也对ZFS-ZED服务存在问题:8月11日23:03:23 debian zed [70734]:ZFS事件守护程序0.6.5.9-5(PID 70734)8月11日23:03:23 debian zed [70734]:无法初始化libzfs 8月11日23:03:23 debian systemd [1]:zfs-zed.service:主进程已退出,代码已退出,状态= 1 / FAILURE 8月11日23:03:23 debian systemd [1]:zfs-zed.service:设备进入失败状态。8月11日23:03:23 debian systemd [1]:zfs-zed.service:失败,返回结果为“退出代码”。
user3450548
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.