डेबियन 9 खिंचाव पर zfs स्थापित करें


11

मैंने डेबियन 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

एक क्लासिक उपयुक्त-अद्यतन प्राप्त किया और फिर निम्नलिखित के साथ 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 स्थापना से संबंधित पैकेज?

डेबियन 9 में zfs स्थापित करने का सही तरीका क्या है?


का आउटपुट क्या है dkms status | grep zfs?
GAD3R

जवाबों:


9

@Cas द्वारा वास्तविक उत्तर अच्छा है लेकिन कुछ सुधारों को लागू किया जाना है।

तो चलिए डेबियन 9 की एक नई स्थापना लेते हैं और यह मानते हुए कि कंट्रीब्यूट नॉन-फ्री रिपोजिटरी भी सक्षम नहीं हैं।


चरण 0 - गैर-मुक्त रिपॉजिटरी को सक्षम करें

मैं अंदर मुख्य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 वितरण के अंदर एक बग के कारण प्रतीकात्मक लिंक की आवश्यकता है, जो 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 बनाना चाहते हैं

इस बिंदु पर मुझे पता चला कि रिबूट से पहले आपको एक ज़ूलू बनाना होगा अन्यथा ज़फ़्स नहीं होने पर उचित मॉड्यूल लोड नहीं करेंगे। यह संसाधन तंत्र को बचाने का एक प्रकार है (लेकिन उस स्थिति में भी यह अभी भी त्रुटियों को अंदर फेंक देगा journalctl -xe)

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

"हम ऐसा नहीं कर रहे हैं क्योंकि ZFS मॉड्यूल कर्नेल को दागदार कर देगा, अगर कोई ज़ूल उपलब्ध नहीं है तो इसे लोड नहीं किया जाना चाहिए।"

यदि आप इस भाग को याद करते हैं तो आपको चरण 2 से शुरू करना होगा

उदाहरण के लिए, @cas द्वारा दिए गए उदाहरण का उपयोग करके, आप इस फ़ाइल को ज़ूल पर आधारित बना सकते हैं या सीधे अपने डिस्क पर आधारित बना सकते हैं।

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?। या तो पूल बनाने, या के साथ बाद में ठीक कर जब से-आईडी नामों का उपयोग करें zpool export <pool>द्वारा पीछा किया zpool import -d /dev/disk/by-id/ <pool>। ये नाम / dev / sd * के विपरीत, रिबूट में बने रहेंगे। इसके अलावा, यदि आपके पास एक लेबल प्रिंटर है, तो आप उप-आईडी डिवाइस नामों के छोटे संस्करणों के साथ लेबल प्रिंट कर सकते हैं (आमतौर पर नाम का एक सीरियल नंबर भाग जो एक अच्छा, छोटा, अनूठा लेबल बनाता है) और उन्हें बनाने के लिए ड्राइव को लेबल करता है। यह पहचानना आसान है कि क्या उन्हें कभी बदलने की आवश्यकता है।
कैस

Ummm - लेकिन ZFS does create के दौरान उपयोग की जाने वाली डिस्क उपनामों की परवाह नहीं करता है - सभी जानकारी डिस्क पर zfs-part9 को लिखी जाती है - और इसका उपयोग सरणी के निर्माण के लिए किया जाता है। मुझे वास्तव में परवाह नहीं है कि भविष्य में किसी और चीज़ में क्या / dev / sdb परिवर्तन था, और मैं हमेशा lsblk -fड्राइव हार्डवेयर के साथ डिकरिंग करने से पहले जाँच करता हूं - हमारे उत्पादन सर्वरों के लिए डेल ओएसडी ब्लिंक टूल वर्तमान ओएस से संबंधित में उपयोगी है- भौतिक इकाई के लिए उर्फ ​​:) - मुझे लगता है कि अन्य बढ़ते सिस्टम के लिए / dev / डिस्क / बाय-आईडी अधिक उपयोगी है, जिसमें ZFS की स्थिरता नहीं है - जैसे fstab।
जेफ

by-id का उपयोग करने से आपको सार्थक और उपयोगी नाम मिलेंगे (प्रत्येक ड्राइव के ब्रांड, मॉडल और सीरियल नंबर की पहचान करना) zpoolजैसे कमांड में statusऔर list, जो आसानी से किसी भी आवश्यक ज़ूल ऑफ़लाइन / डिटैच / रिप्लेस / रिप्लेस / कमांड में कॉपी-पेस्ट किया जा सकता है। sdaआपको कुछ भी उपयोगी नहीं बताता है। ata-ST4000VN008-2DR166_ZDH35XXXवास्तव में यह बताता है कि यह किस प्रकार की ड्राइव है और इसका क्रम संख्या है। तुम अब भी (वर्तमान) लघु देव नाम प्राप्त कर सकते अगर आप कभी भी उन्हें प्रयोग करना चाहता हूँ -Lके साथ विकल्प zpool list, zpool status, आदि (मेरे अनुभव, ज्यादातर के साथ उपयोगी में zpool list -L -v)।
कैस

IME, सार्थक नाम मानवीय त्रुटि को कम करने में मदद करते हैं। यह आसान है, उदाहरण के लिए, sdf के रूप में sdd। बहुत मुश्किल से एक उप-आईडी नाम गलत है।
कैस

योग्य - बहुत सारे लोग एक ही सिफारिश करते हैं - मुझे व्यक्तिगत रूप से याद रखना आसान है और sdc sde sdf और sdg टाइप करना है। हम बैचों में डिस्क खरीदते हैं और वे सभी एक ही 48 या तो आईडी आईडी के साथ शुरू करते हैं और बस 2-4 अंकों के प्रत्यय होते हैं जो अलग-अलग होते हैं। लोग by-id नामों को टाइप नहीं करते हैं - वे टैब-पूरा करने का उपयोग करते हैं - एक ऊप्स आईएमएचओ की ओर ले जाने की अधिक संभावना। मुझे तीन वर्णों में एक वर्ण को 52 चार नाम में 2-4 अंकों की तुलना में बहुत आसान लगता है। मुझे पता है कि बहुत से लोग UUID की भी सलाह देते हैं। जैसा कि ZFS परवाह नहीं करता है, मुझे लगता है कि मुझे जो आसान लगता है मैं उससे चिपके रहूंगा - कम कभी-कभी अधिक होता है :)
जेफ

3

मैंने अभी इसका परीक्षण करने के लिए एकदम नया स्ट्रेच वीएम बनाया है। न्यूनतम इंस्टॉल (बस ssh और मानक सिस्टम टूल), contrib और गैर-मुक्त जोड़ने के लिए source.list संपादित करें, फिर:

apt-get install spl-dkms zfs-dkms

आप मैन्युअल रूप से इंस्टॉल करना भी चाह सकते हैं zfsutils-linux। जब आप स्थापित करते हैं तो यह स्वचालित रूप से स्थापित किया जाना चाहिए zfs-dkmsलेकिन निर्भरताएं अलग-अलग डेबियन रिलीज के लिए और डेबियन जेडओएल पैकेज के विभिन्न संस्करणों के लिए भिन्न हो सकती हैं:

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भी सुनिश्चित करना चाहते हैं कि 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

ज़ूल काम कर रहा है और / टैंक को रिबूट के बाद स्वचालित किया गया है।

निष्कर्ष: यह अब काम करता है।


BTW, यह खिंचाव VM मेरी sidडिस्क के रूप में अपने मुख्य सिस्टम पर बनाए गए ZFS zvol का उपयोग करता है । मैंने एक स्नैपशॉट बनाया अगर यह प्रारंभिक स्थापना के तुरंत बाद, स्प्ल-डीकेएमएस और ज़्फ़-डीकेएस स्थापित करने से पहले ताकि मैं जल्दी से वापस आ सकूं और कुछ भी गलत होने पर फिर से शुरू कर सकूं।

मैंने पहली बार केवल 1GB के साथ zvol बनाया था और बाद में बिल्ड-एसेंशियल, लिनेक्स-हेडर-एमड 64 आदि के लिए पर्याप्त स्थान रखने के लिए इसे बढ़ाने की आवश्यकता थी:

# 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 / सेवा गैर अस्तित्व में है .. मेरे पास भी यह संदेश है: "zfs-import-Mount.service को पुनः आरंभ करने में विफल: इकाई zfs-import-Mount.service नहीं मिला।" और "zfs-import-share.service को पुनरारंभ करने में विफल: यूनिट zfs-import-share.service नहीं मिला।"
user3450548

ऐसा लगता है कि मुझे जर्नल-एक्स पढ़कर ZFS-ZED सेवा के साथ भी समस्याएं हैं: अगस्त 11 23:03:23 डेबियन जेड [70734]: ZFS इवेंट डेमन 0.6.5.9-5 (PID 70734) अगस्त 11:03:23 डेबियन zed [70734]: libzfs को शुरू करने में विफल हुआ Aug 11 23:03:23 डेबियन सिस्टमड [1]: zfs-zed.service: मुख्य प्रक्रिया से बाहर, कोड = बाहर, स्थिति = 1 / FAIL अगस्त 11 23:03:23 डेबियन सिस्टमड [१]: zfs-zed.service: यूनिट में विफल अवस्था में प्रवेश किया। Aug 11 23:03:23 डेबियन सिस्टमड [1]: zfs-zed.service: परिणाम 'निकास-कोड' के साथ विफल।
user3450548
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.