데비안 9 스트레치에 ZFS 설치


11

debian 9.1에 zfs를 설치하려고했지만 오류가 발생했습니다.

첫 번째 설치는 zfs-dkm에만 있었지만 zfs-dkms를 실행하려면 spl-dkms가 필요하다는 것을 인터넷에서 읽었습니다.


내 단계는 다음과 같이 contrib를 무료 로 추가하여 source.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 - 리눅스 ZFS 설치 패키지 관련?

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


출력은 dkms status | grep zfs무엇입니까?
GAD3R

답변:


9

@cas의 실제 답변은 좋지만 일부 수정 사항이 적용됩니다.

따라서 데비안 9를 새로 설치하고 contrib non-free 저장소도 활성화되지 않았다고 가정합니다 .


0 단계-contrib non-free 저장소 사용

나는 내부에서 mainsed 이라는 단어를 찾아서 대체했습니다./etc/apt/sources.list

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

apt-get update

1 단계-ZFS 설치

마지막 수정 사항 spl-dkmszfs-dkms종속성으로 올바르게 표시 되므로 자동으로 재 호출되므로 이전에 수동으로 설치할 필요가 없습니다 zfs-dkms. 데비안 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

데비안 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

Hooray- 모든 현재 및 비트 로트 보호 :)


+1이지만 기기 /dev/disk/by-id/?보다는 사용하는 것이 좋습니다 /dev/sd?. 풀을 만들거나 나중에 고칠 때 어느 바이 ID 이름을 사용 zpool export <pool>하였다 zpool import -d /dev/disk/by-id/ <pool>. 이 이름은 / dev / sd *와 달리 재부팅 후에도 유지됩니다. 또한 라벨 프린터를 사용하는 경우 짧은 버전의 바이-디바이스 장치 이름이있는 라벨을 인쇄하고 (일반적으로 좋은 짧고 고유 한 라벨을 만드는 이름의 일련 번호 부분이 있음) 드라이브에 라벨을 지정하여 라벨을 만들 수 있습니다 교체가 필요한지 쉽게 식별 할 수 있습니다.
cas

Ummm-그러나 ZFS는 작성 중에 사용 된 디스크 별명을 신경 쓰지 않습니다. 모든 정보는 디스크의 zfs-part9에 작성되며 이는 배열을 구성하는 데 사용됩니다. 나는 / dev / sdb가 미래에 다른 것으로 바뀌 었는지 여부는 정말로 신경 쓰지 않으며, 항상 lsblk -f드라이브 하드웨어를 다루기 직전에 확인 합니다. 프로덕션 서버의 경우 Dell HDD 깜박임 도구는 현재 OS와 관련하여 유용합니다 물리적 장치의 별칭 :)-/ dev / disk / by-id는 ZFS가 일관성이없는 다른 마운트 시스템 (예 : fstab)에 더 유용하다고 생각합니다.
Jeff

에 의해-id를 사용하는 것은 당신에 (각 드라이브의 브랜드, 모델 및 일련 번호를 식별) 의미 / 유용한 이름을 줄 것 zpool같은 명령을 status하고 list쉽게 필요한이 zpool 오프라인 / 분리 / 교체 / 등 명령에 붙여 넣은 복사 할 수있는. sda유용한 정보는 없습니다. ata-ST4000VN008-2DR166_ZDH35XXX드라이브 종류와 일련 번호를 정확하게 식별합니다. 혹시 그들이 사용하려는 경우 여전히 (현재의) 짧은 dev에 이름을 얻을 수있는 -L옵션과 함께 zpool list, zpool status등 (내 경험에 주로 유용에 zpool list -L -v).
cas

의미있는 이름 인 IME는 인적 오류를 줄이는 데 도움이됩니다. 예를 들어, sdd를 sdf로 잘못 입력하기 쉽습니다. by-id 이름을 잘못 입력하기가 훨씬 어렵습니다.
cas

Lol-많은 사람들이 같은 추천을합니다. 개인적으로 sdc sde sdf 및 sdg를 기억하고 입력하는 것이 더 쉽다는 것을 개인적으로 알았습니다. 우리는 일괄 적으로 디스크를 구입하며 모두 같은 48 개 바이 ID 문자로 시작하며 2-4 자리의 접미사가 다릅니다. 사람들은 ID별로 이름을 입력하지 않습니다. 탭 완성을 사용하면 IMHO가 발생할 수 있습니다. 52 자 이름의 2 자릿수보다 3 자의 문자 하나를 구별하는 것이 훨씬 쉽습니다. 많은 사람들이 UUID를 추천한다는 것을 알고 있습니다. ZFS는 신경 쓰지 않기 때문에 내가 찾은 것을 고수 할 것이라고 생각합니다. 때로는 적을수록 적습니다.)
Jeff

3

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

apt-get install spl-dkms zfs-dkms

수동으로 설치할 수도 있습니다 zfsutils-linux. 설치할 때 자동으로 설치 zfs-dkms되지만 종속성은 데비안 릴리스 및 버전에 따라 다를 수 있습니다.

apt-get install  zfsutils-linux

의 시스템 단위 파일에 버그가있는 것처럼 보입니다 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 서비스를 다시 시작하기 전에 수동으로 실행했습니다 . 그들이 자동으로 할 것인지 확실하지 않으므로 그렇게해야 할 수도 있습니다.

BTW, apt-get install zfs-initramfsinitramfs 중에 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가 자동 마운트됩니다.

결론 : 지금 작동합니다.


BTW,이 스트레치 VM은 기본 sid시스템 에서 생성 된 ZFS zvol을 디스크로 사용합니다. spl-dkms 및 zfs-dkms를 설치하기 전에 초기 설치 직후에 스냅 샷을 작성하여 중대한 문제가 발생한 경우 신속하게 되돌릴 수 있습니다.

먼저 zvol을 1GB로 만들었고 나중에 빌드 필수, linux-headers-amd64 등을위한 충분한 공간을 확보하기 위해 zvol을 늘려야했습니다.

# 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=lz4VM의 탱크 설정 이 쓸모없는 것보다 나쁠 수 있습니다. zvol에는 이미 lz4 압축이 있습니다.


새로운 vm에 설치하려고했지만 여전히 문제가 발생합니다. 일부 서비스가 제대로 시작되지 않습니다. 지금까지 ZFS DKMS 버그 목록이 "설치할 수 없음"버그로 채워져 있음을 알 수 있습니다. 보고서. apt-get install zfs-dkms를 사용하여 이러한 많은 버그 수정 요청을 재현 할 수있는 몇 개월 후에 개발자가 몇 달을 지나갈 수 있을지 궁금합니다.
user3450548

cd 디렉토리를 요청한 부분에서 다음을 의미합니다. / etc / systemd / system /? / etc / systemd / service가 존재하지 않기 때문에 .. "zfs-import-mount.service를 다시 시작하지 못했습니다 : zfs-import-mount.service 장치를 찾을 수 없습니다."라는 메시지가 나타납니다. 및 "zfs-import-share.service을 (를) 다시 시작하지 못했습니다 : Unit zfs-import-share.service 찾을 수 없음."
user3450548

journalctl -xe : Aug 11 23:03:23 debian zed [70734]를 읽어 ZFS-ZED 서비스에 문제가있는 것 같습니다. [70734] : ZFS Event Daemon 0.6.5.9-5 (PID 70734) Aug 11 23:03:23 debian zed [70734] : libzfs 초기화 실패 8 월 11 일 23:03:23 debian systemd [1] : zfs-zed.service : 기본 프로세스 종료, code = exited, status = 1 / FAILURE 8 월 11 일 23:03:23 debian systemd [1] : zfs-zed.service : 장치가 실패 상태에 들어갔습니다. 8 월 11 일 23:03:23 debian systemd [1] : zfs-zed.service : 'exit-code'결과로 실패했습니다.
user3450548
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.