debian 9stretch에 zfs 설치

debian 9stretch에 zfs 설치

데비안 9.1에 zfs를 설치하려고 하는데 몇 가지 오류가 발생합니다.

첫 번째 설치는 zfs-dkms였지만 온라인에서 zfs-dkms를 실행하려면 spl-dkms도 필요하다는 내용을 읽었습니다.


나의 발걸음은 나의 변화를 위한 것이다소스.목록다음에 추가무료 기부다음과 같이:

/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) ...

읽다로그 제어-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-리눅스zfs 설치와 관련된 패키지?

데비안 9에 zfs를 설치하는 올바른 방법은 무엇입니까?

답변1

@cas의 실제 답변은 좋지만 약간의 수정이 필요합니다.

이제 Debian 9를 새로 설치하고 가정해 보겠습니다.무료 기부저장소도 활성화되어 있지 않습니다.


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. rm올바른 위치에서 바이너리를 찾지 않는 Debian의 zfs 배포판 내의 버그로 인해 기호 링크가 필요합니다 .

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 단계

예를 들어 이 파일을 기반으로 zpool을 생성하거나 @cas에서 제공하는 예제를 사용하여 디스크 기반 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

답변2

Apt 소스를 추가한 후 Debian 9.4가 약간 다르게 보입니다.

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

오랫동안 살다- 모든 존재 및 비트 부패 방지 :)

답변3

방금 이것을 테스트하기 위해 새로운 스트레치 가상 머신을 만들었습니다. 최소 설치(ssh 및 표준 시스템 도구만), source.list를 편집하여 contrib 및 non-free를 추가한 후 다음을 수행합니다.

apt-get install spl-dkms zfs-dkms

수동으로 설치할 수도 있습니다 zfsutils-linux. 를 설치할 때 자동으로 설치되어야 zfs-dkms하지만 데비안 버전과 데비안 ZoL 패키지의 다른 버전에 따라 종속성이 다를 수 있습니다.

apt-get install  zfsutils-linux

systemd 유닛 파일에 버그가 있는 것 같습니다 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 zfszfs 서비스를 다시 시작하기 전에 이 작업을 수동으로 실행했습니다. 이 작업이 자동으로 수행되는지 확실하지 않으므로 사용자도 수행해야 할 수 있습니다.

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은 내 기본 시스템에 생성된 ZFS zvol을 sid디스크로 사용합니다. 초기 설치 직후, spl-dkms 및 zfs-dkms를 설치하기 전에 스냅샷을 찍어서 중요한 문제가 발생하더라도 신속하게 복구하고 다시 시작할 수 있도록 했습니다.

처음 만든 zvol은 1GB에 불과했고 나중에 빌드 필수, 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아마도 쓸모없는 것보다 더 나쁠 것입니다. zvol에는 이미 lz4 압축이 있습니다.

관련 정보