Встановіть zfs на debian 9 stretch


11

Я намагався встановити zfs на debian 9.1, проте у мене виникають деякі помилки.

Моя перша установка була лише з zfs-dkms, проте я прочитав в мережі, що для запуску zfs-dkms також потрібен spl-dkms.


Мої кроки полягали в тому, щоб змінити мій source.list, додавши внесок non-free таким чином:

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

Який правильний спосіб встановити zfs в debian 9?


Який вихід dkms status | grep zfs?
GAD3R

Відповіді:


9

Фактична відповідь від @cas хороша, але слід застосувати деякі виправлення.

Тож давайте візьмемо нову інсталяцію Debian 9 та припустимо, що невільні сховища contrib також не включені.


Крок 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 в 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 перед перезавантаженням, інакше zfs не завантажить належні модулі, якщо немає zpools. Це свого роду механізм економії ресурсів (але навіть у такому випадку це все-таки призведе до помилок всередині 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

Ура - всі присутні та захищені від гниття :)


+1, але настійно рекомендую використовувати, /dev/disk/by-id/?а не /dev/sd?пристрої. Або використовуйте імена by-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.
Джефф

Використання by-id дасть вам значущі / корисні назви (ідентифікуючи марку, модель та серійний номер кожного диска) у zpoolтаких командах, як statusі list, які можна легко скопіювати в будь-які необхідні команди zpool offline / відключити / замінити / тощо. sdaне говорить вам нічого корисного. ata-ST4000VN008-2DR166_ZDH35XXXточно визначає, що це за привід і його серійний номер. Ви все одно можете отримати (поточні) короткі імена розробників, якщо ви хочете, щоб вони використовували -Lпараметр з zpool list, zpool statusі т. Д. (На мій досвід, в основному корисні для zpool list -L -v).
cas

IME, значущі назви допомагають зменшити помилки людини. Це легко ввести помилку, наприклад, sdd як sdf. набагато складніше помилково ввести ім'я від імені.
cas

Lol - багато людей дають ту саму рекомендацію - мені особисто легше запам’ятовувати та вводити sdc sde sdf та sdg. Ми купуємо диски партіями, і всі вони починаються з одних і тих же 48-ти ідентичних символів і просто мають 2-4-значні суфікси, які відрізняються. Люди не вводять імена id-id - вони використовують заповнення вкладки - швидше за все, це призведе до появи IMHO. Я вважаю, що розмежувати одну букву в трьох знаках набагато простіше, ніж 2-4 цифри в імені 52 знака. Я знаю, що багато людей також рекомендують UUID. Оскільки ZFS не хвилює, я думаю, я буду дотримуватися того, що мені здається легше - менше іноді більше :)
Jeff

3

Я щойно створив нову розтяжку VM, щоб перевірити це. Мінімальна установка (лише ssh та стандартні системні інструменти), відредагуйте source.list, щоб додати внесок та non-free, а потім:

apt-get install spl-dkms zfs-dkms

Ви також можете встановити вручну zfsutils-linux. Він повинен встановлюватися автоматично при встановленні, zfs-dkmsале залежності можуть відрізнятися для різних версій Debian та для різних версій пакетів Debian ZoL:

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 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 працює і / танк автоматизується після перезавантаження.

Висновок: він працює і зараз.


До речі, ця VM-розтяжка використовує ZFS zvol, створений в моїй основній sidсистемі як свій диск. Я зробив знімок, якщо він одразу після початкової установки, перед тим, як встановити spl-dkms та zfs-dkms, щоб я міг швидко повернутись та запустити знову, якщо щось важливе пішло не так.

Я спершу зробив zvol лише у 1 Гб і мені потрібно було його збільшити пізніше, щоб мати достатньо місця для створення необхідних, Linux-заголовків-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 ..
user3450548,

У тій частині, де ви запитуєте каталог cd, ви мали на увазі: / etc / systemd / system /? тому що / etc / systemd / service не існує .. також у мене є таке повідомлення: "Не вдалося перезапустити zfs-import-mount.service: Блок zfs-import-mount.service не знайдено." та "Не вдалося перезапустити zfs-import-share.service: Блок zfs-import-share.service не знайдено."
користувач3450548

Здається, у мене також є проблеми зі службою ZFS-ZED, читаючи journalctl -xe: 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: Основний процес вийшов, код = вийшов, статус = 1 / ПОМИЛКА 11 серпня 23:03:23 debian systemd [1]: zfs-zed.service: Блок введений невдалий стан. 11 серпня 23:03:23 debian systemd [1]: zfs-zed.service: Помилка з результатом 'вихід-код'.
користувач3450548
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.