ติดตั้ง zfs บนเดเบียน 9 ยืด


11

ฉันพยายามติดตั้ง zfs บนเดเบียน 9.1 แต่ฉันพบข้อผิดพลาด

การติดตั้งครั้งแรกของฉันเป็นเพียง zfs-dkms แต่ฉันอ่านบนเน็ตที่ยังต้องใช้ spl-dkms เพื่อให้ zfs-dkms ทำงาน


ขั้นตอนของฉันคือการเปลี่ยนแหล่งที่มาของฉันรายการเพิ่มcontrib ที่ไม่เป็นอิสระดังต่อไปนี้:

/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?

วิธีที่ถูกต้องในการติดตั้ง zfs ในเดเบียน 9 คืออะไร?


อะไรคือผลลัพธ์ของdkms status | grep zfs?
GAD3R

คำตอบ:


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จำเป็นต้องมีลิงก์สัญลักษณ์เนื่องจากข้อผิดพลาดภายในการกระจาย zfs ใน Debian ที่ไม่ได้ค้นหา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 ก่อนที่จะรีบูตมิฉะนั้น zfs จะไม่โหลดโมดูลที่เหมาะสมหากไม่มี zpool มันเป็นกลไกในการประหยัดทรัพยากร (แต่ในกรณีนี้จะยังคงมีข้อผิดพลาดอยู่ภายในjournalctl -xe)

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

"เราไม่ได้ทำเช่นนี้เพราะโมดูล ZFS จะทำให้เคอร์เนลเสียหากไม่มี zpool ให้ใช้งานก็ไม่ควรโหลด"

หากคุณพลาดส่วนนี้คุณต้องเริ่มจากขั้นตอนที่ 2

ตัวอย่างเช่นโดยการใช้ตัวอย่างที่ให้บริการโดย @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


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

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ก่อนที่จะเริ่มใช้ฮาร์ดแวร์ไดรฟ์ - สำหรับเซิร์ฟเวอร์ที่ใช้งานจริงของเราเครื่องมือกะพริบ hdd ของ Dell มีประโยชน์ในการเกี่ยวข้องกับระบบปฏิบัติการปัจจุบัน นามแฝงกับหน่วยทางกายภาพ :) - ฉันคิดว่า / dev / disk / by-id มีประโยชน์มากกว่าสำหรับระบบติดตั้งอื่น ๆ ที่ไม่มีความสอดคล้องของ ZFS ในตัว - เช่น fstab
Jeff

การใช้ by-id จะให้ชื่อที่มีความหมาย / มีประโยชน์ (ระบุแบรนด์รุ่นและหมายเลขซีเรียลของไดรฟ์แต่ละตัว) ในzpoolคำสั่ง like statusและlistซึ่งสามารถคัดลอกวางลงในคำสั่งzpool ออฟไลน์ / แยก / แทนที่ / etc ที่จำเป็นได้อย่างง่ายดาย sdaไม่ได้บอกคุณว่ามีประโยชน์อะไร ata-ST4000VN008-2DR166_ZDH35XXXระบุประเภทของไดรฟ์และหมายเลขประจำเครื่อง คุณยังสามารถได้รับชื่อ (ปัจจุบัน) dev สั้นถ้าคุณเคยต้องการให้พวกเขาโดยใช้-Lตัวเลือกที่มีzpool list, zpool statusฯลฯ (ในประสบการณ์ของผมที่มีประโยชน์ส่วนใหญ่zpool list -L -v)
cas

IME ชื่อที่สื่อความหมายช่วยลดความผิดพลาดของมนุษย์ ง่ายต่อการพิมพ์ผิดเช่น sdd เป็น sdf ยากกว่าการพิมพ์ชื่อ - ไอดี
cas

ฮ่า ๆ - คนจำนวนมากให้คำแนะนำเดียวกัน - ฉันพบว่ามันง่ายต่อการจดจำและพิมพ์ sdc sde sdf และ sdg เราซื้อดิสก์ด้วยแบทช์และพวกเขาทั้งหมดเริ่มต้นด้วย 48 ตัวอักษรเดียวกันโดยใช้รหัสประจำตัวและมีส่วนต่อท้าย 2-4 หลักที่แตกต่างกัน ผู้คนไม่พิมพ์ชื่อตามรหัส - พวกเขาใช้การกรอกข้อมูลในแท็บ - มีแนวโน้มที่จะนำไปสู่การ IMO ฉันพบความแตกต่างของตัวอักษรหนึ่งตัวในสามอักขระได้ง่ายกว่า 2-4 หลักในชื่อตัวอักษร 52 ตัว ฉันรู้ว่าคนจำนวนมากยังแนะนำ UUID เนื่องจาก ZFS ไม่สนใจฉันคิดว่าฉันจะยึดติดกับสิ่งที่ฉันค้นหาได้ง่ายขึ้น - บางครั้งก็น้อยลง :)
Jeff

3

ฉันเพิ่งสร้าง VM ใหม่ล่าสุดเพื่อทดสอบสิ่งนี้ ติดตั้งน้อยที่สุด (เพียง ssh และเครื่องมือระบบมาตรฐาน) แก้ไขซอร์สรายการเพื่อเพิ่ม contrib และไม่ฟรีจากนั้น:

apt-get install spl-dkms zfs-dkms

zfsutils-linuxนอกจากนี้คุณยังอาจต้องการที่จะติดตั้งด้วยตนเอง ควรติดตั้งโดยอัตโนมัติเมื่อคุณติดตั้งzfs-dkmsแต่การขึ้นต่อกันอาจแตกต่างกันไปสำหรับรุ่น Debian ที่แตกต่างกันและแพ็คเกจ Debian 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 zfsก่อนที่จะเริ่มบริการ zfs ฉันไม่แน่ใจว่าพวกเขาจะทำเช่นนั้นโดยอัตโนมัติหรือไม่ดังนั้นคุณอาจต้องทำเช่นกัน

BTW คุณอาจต้องการapt-get install zfs-initramfsเช่นกันเพื่อให้แน่ใจว่ามีการโหลด zfs ในช่วง initramfs


ฉันทดสอบว่าใช้ได้กับ:

# 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 ที่ยืดออกนี้ใช้ 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บนถังใน VM น่าจะแย่กว่าไร้ประโยชน์ - zvol มีการบีบอัด lz4 อยู่แล้ว


ฉันพยายามติดตั้งลงบน VM ใหม่ แต่ฉันยังคงประสบปัญหาฉันเดา .. บริการบางอย่างไม่เริ่มต้นอย่างถูกต้อง .. เท่าที่ฉันเห็นรายการข้อบกพร่อง ZFS DKMS เต็มไปด้วยข้อบกพร่อง "ไม่สามารถติดตั้ง" รายงาน ฉันสงสัยว่าเป็นเรื่องปกติหรือเปล่าที่นักพัฒนาให้เวลาผ่านไปหลายเดือนหลังจากการร้องขอแก้ไขข้อผิดพลาดจำนวนมากเช่นนี้ซ้ำกับ apt-get install zfs-dkms ..
3450548

ในส่วนที่คุณขอไดเร็กตอรี่ cd ที่คุณต้องการ: / etc / systemd / system /? เพราะ / etc / systemd / service ไม่มีอยู่ .. และฉันมีข้อความนี้: "ไม่สามารถรีสตาร์ท zfs-import-mount.service: ไม่พบหน่วย zfs-import-mount.service" และ "ไม่สามารถรีสตาร์ท zfs-import-share.service: ไม่พบหน่วย zfs-import-share.service"
user3450548

ดูเหมือนว่าฉันยังมีปัญหากับบริการ ZFS-ZED โดยอ่าน journalctl -xe: Aug 11 23:03:23 debian zed [70734]: ZFS Event Daemon 0.6.5.9-5 (PID 70734) 11 สิงหาคม 23:03:23 debian zed [70734]: ล้มเหลวในการเริ่มต้น libzfs 11 ส.ค. 23:03:23 debian systemd [1]: zfs-zed.service: กระบวนการหลักออกจากรหัส = exited สถานะ = 1 / FAILURE Aug 11 23:03:23 debian systemd [1]: zfs-zed.service: หน่วยที่ป้อนล้มเหลว 11 ส.ค. 23:03:23 debian systemd [1]: zfs-zed.service: ล้มเหลวด้วยผลลัพธ์ 'exit-code'
user3450548
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.