Debian 9ストレッチにzfsをインストールする


11

debian 9.1にzfsをインストールしようとしましたが、いくつかエラーが発生しています。

私の最初のインストールはzfs-dkmsだけでしたが、zfs-dkmsを実行するにはspl-dkmsも必要であることをネットで読みました。


私の手順は、次のようにnon-freeを追加して私のsources.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-linuxパッケージはzfsインストールにどのように関連していますか?

debian 9にzfsをインストールする正しい方法は何ですか?


の出力はdkms status | grep zfs何ですか?
GAD3R 2017

回答:


9

@casによる実際の答えは良いですが、適用されるいくつかの修正があります。

それでは、Debian 9の新規インストールを行い、contrib non-freeリポジトリも有効化されていないと仮定しましょう。


ステップ0-contrib non-freeリポジトリーを有効にする

私は内部でメインsedという単語を見つけて置き換えていました/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。Debianの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-少なくとも1つのZPOOLを作成する必要があります

この時点で、再起動前にYOUがzpoolを作成する必要があることを発見しました。そうしないと、zpoolがない場合、zfsは適切なモジュールをロードしません。これはリソース節約メカニズムの一種です(ただし、その場合でも、内部でエラーがスローされます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 *とは異なり、再起動後も保持されます。また、ラベルプリンターを使用している場合は、by-idデバイス名の短いバージョンでラベルを印刷し(通常、名前のシリアル番号部分があり、これにより、適切な短い一意のラベルが作成されます)、ドライブにラベルを付けて作成できます。交換が必要かどうかを簡単に特定できます。
cas

うーん-しかし、ZFSは作成中に使用されるディスクエイリアスを気にしません-すべての情報はディスク上のzfs-part9に書き込まれます-これがアレイの構築に使用されます。/ dev / sdbが将来的に他の何かに変更されるかどうかは気にしません。lsblk -fドライブハードウェアを使用する直前に常に確認します。本番サーバーでは、Dell HDD点滅ツールが現在のOSを関連付けるのに役立ちます。物理ユニットのエイリアス:)-/ dev / disk / by-idは、ZFSの組み込みの一貫性を持たない他のマウントシステム(たとえば、fstab)の場合により便利だと思います。
ジェフ

by-idを使用すると、やなどのzpoolコマンドで意味のある/役立つ名前(各ドライブのブランド、モデル、シリアル番号を識別)が表示され、必要なzpool offline / detach / replace / etcコマンドに簡単にコピーstatusアンドlistペーストできます。 sda役に立つことは何も言わない。 ata-ST4000VN008-2DR166_ZDH35XXXドライブの種類とシリアル番号を正確に識別します。あなたはそれらを使用したい場合は、まだ(現在の)短いDEV名を取得することができ-Lてオプションをzpool listzpool status(と主に便利な、私の経験ではなど、zpool list -L -v)。
cas

IME、意味のある名前は人的エラーを減らすのに役立ちます。sddをsdfのように入力するのは簡単です。by-idの名前を誤って入力するのははるかに困難です。
cas

笑-多くの人が同じように勧めています-私は個人的に覚えて、sdc sde sdfとsdgと入力する方が簡単だと思います。私たちはバッチでディスクを購入し、それらはすべて同じ48程度のby-id文字で始まり、2〜4桁のサフィックスが異なるだけです。人々はby-id名を入力しない-彼らはタブ補完を使用する-おっと私見につながる可能性が高い。52文字の名前の2〜4桁よりも、3文字の1文字を区別する方がはるかに簡単です。多くの人がUUIDを推奨していることも知っています。ZFSは気にしないので、私が見つけたものに固執すると思います-少ない方が時々多いです:)
Jeff

3

これをテストするために、まったく新しいストレッチVMを作成しました。最小限のインストール(sshと標準のシステムツールのみ)、sources.listを編集してcontribとnon-freeを追加し、次に:

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 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は、メインsidシステムで作成したZFS zvolをディスクとして使用します。最初のインストールの直後、spl-dkmsとzfs-dkmsをインストールする前にスナップショットを作成したので、大きな問題が発生した場合にすばやく元に戻して再起動できます。

私は最初に1 GBのみでzvolを作成しましたが、ビルドに必要なスペース、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=lz4VMのtankの設定は、おそらく役に立たないよりも悪いです-zvolにはすでにlz4圧縮が施されています。


新しいvmにインストールしようとしましたが、まだ問題が発生しているようです。一部のサービスが正しく起動していません。レポート。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が見つかりません。」
user3450548 2017

Journalctl -xeを読み取ることにより、ZFS-ZEDサービスにも問題があるようです:Aug 11 23:03:23 debian zed [70734]:ZFSイベントデーモン0.6.5.9-5(PID 70734)Aug 11 23:03:23 debian zed [70734]:libzfsの初期化に失敗しましたAug 11 23:03:23 debian systemd [1]:zfs-zed.service:メインプロセスが終了しました、コード=終了、ステータス= 1 / FAILURE Aug 11 23:03:23 debian systemd [1]:zfs-zed.service:ユニットは障害状態に入りました。8月11日23:03:23 debian systemd [1]:zfs-zed.service:結果「exit-code」で失敗しました。
user3450548 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.