web-dev-qa-db-ja.com

Archは起動時にbtrfsアレイをマウントしません

データパーティションとして、マルチディスクbtrfsファイルシステムがあります。私のルートディスクはext4です

Fstab:

UUID=290624c6-6b95-41fd-94a1-923ebca64b83   /           ext4        rw,relatime,data=ordered    0 1
/dev/sdc    /mnt/btrfs  btrfs   rw,relatime,compress-force=zlib,autodefrag  0   0

マシンを起動すると、メッセージとともに1分30秒待機します

A start job is running for dev-sdc.device

それとその後

Dependency failed for /mnt/btrfs

ログインするとできる

mount /mnt/btrfs
systemctl default

そしてそれはうまくいくでしょう。システムは正常に起動します。

私は最初にmkinitcpioフックで何かをする必要があるかもしれませんが、 このページ は言います:

Archのデフォルトのmkinitcpioパッケージには、マルチデバイス(RAID)サポートを取得するのに十分な標準のbtrfsフックが含まれています。それ以外に、カーネルはフックなしで単一デバイスのbtrfsルートを起動することができます

したがって、すべてが箱から出して動作するはずです。

なぜうまくいかないのですか、それを修正するにはどうすればよいですか?

8
Peter Smit

2つのコメント。まず、デバイスではなくラベルまたはUUIDでマウントしてみます。デバイス名は変更されることがあります。

それ以外の場合、btrfsは、マシン上のbtrfsファイルシステムを認識する前に、brtfs device scan呼び出しを必要とします。 Archがこれを処理することを期待していましたが、このためのサービスファイルを作成して/etc/systemd/system/local-fs-pre.target.wants/btrfs-dev-scan.serviceに配置するまで、どういうわけか機能しませんでした。

[Unit]
Description=Btrfs scan devices
Before=local-fs-pre.target
DefaultDependencies=false

[Service]
Type=oneshot
ExecStart=/usr/bin/btrfs device scan

[Install]
WantedBy=local-fs-pre.target

DefaultDependencies=falseが必要です。それ以外の場合は、ブートが失敗します。 (Arch以外のユーザーは、/sbinではなく/usr/binbtrfsがある場合があります)

これはbtrfsフックで処理する必要があります(少し後で考えました)が、それでも問題が発生する可能性があります。

ただし、他の問題がある可能性があります。そのDependency failedは、以前に必要だったサービスが開始されなかったことを示しています。私はそれが何であるかを知りません、あなたはあなたのjournalctl -bをチェックして依存性の苦情を検索するべきです、それは通常何が欠けているかを正確に述べています。または、少なくとも、失敗した依存関係のチェーンを取得します-依存関係の失敗が伝播する可能性があります...

systemd-analyze plot > boot.svgを生成し、正確に何がどの順序で起動したかを確認することもできます。何がうまくいかなかったのか、誰が誰を待っていたのか、それから推測できます。そして、systemctl --failedは何と言っていますか?

8
orion

確実にするために含めることができるmkinitcpioのフックがあります

btrfs device scan

ルートファイルシステムがマウントされる前の起動中に実行されます。

このフックを含めるには、/etc/mkinitcpio.confを変更し、行HOOKSを検索して、btrfsの前にudevを置きます。

変更後は、必ずmkinitcpio -p linuxでinitramfsを再生成してください。

ArchWikiは実際にはudevフックの使用を推奨していますが、同じ問題があり、この方法で修正されています。

3
Michael Lam