web-dev-qa-db-ja.com

モードRAID1でBTRFSを使用して複数のデバイスにDebianJessieを正しくインストールする方法は?

簡単な紹介として、私が持っているセットアップの種類と達成したいことを説明します。その後、私は自分の問題を説明しようとします。これがU&Lに関する私の最初の質問なので、おそらく奇妙なことをお詫びしなければなりません。かなり長いので、BTRFSまたはDebianの新規ユーザーは、私の経験から恩恵を受けたり、チュートリアルのようなものとして使用したりすることができます。

基本的なハードウェアのセットアップ

Haswell世代のメインボードとCPUがあり、RAMと2つのSSDがあります。

(注:適切な診断を行うために、これらのパーツ以外は何も接続されていません。これらのパーツについてさらに情報が必要な場合は、詳細をお気軽にお問い合わせください。)

Todo

両方のドライブをミラーリングするモードRAID1でBTRFSを使用して両方のSSDにDebianJessieをインストールしたいので、一方に障害が発生した場合でも、もう一方を劣化モードで続行できます。

私がまだ達成したこと

現在、Jessieがテストを行っているため、過去にテストブランチのインストールで問題が発生したため、前のWheezyでクリーンインストールを開始しました。インストール中に、最初のドライブ(たとえば、[〜#〜] a [〜#〜])を次の方法で手動でパーティション分割しました。

  • 単一のパーティションのみ(ドライブ上のすべての使用可能なスペースを使用する将来のすべてのマウントポイントを含む)、
  • bTRFSでのフォーマットと
  • スワップパーティションを残します。

インストールは[〜#〜] a [〜#〜]で成功し、その後Jessieにアップグレードしました(/etc/apt/sources.listを編集してapt-get update && dist-upgradeを実行しました。再起動を実行しました。カーネル3.14-2-が正常に表示されました。 AMD64になりました。

その後、もう一方のドライブの準備を開始しました(たとえば、[〜#〜] b [〜#〜])。 [〜#〜] a [〜#〜]のパーティションテーブルをsfdisk -d /dev/sda > /tmp/sda.ptでコピーし、[〜#〜] b [〜#〜]sfdisk /dev/sdb < /tmp/sda.ptでダンプしました。

これで、デバイスを追加し、次のコマンドを使用してRAID1への変換を実行する準備が整いました。

mount /dev/sda1 /mnt
btrfs device add /dev/sdb1 /mnt
btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt

ここまでは、btrfs filesystem showエイリアス[〜#〜] a [〜#〜]および/dev/sda1エイリアス[〜#〜] b [〜#〜]を含む/dev/sdb1のRAID1を見るとすべて成功しました。さらに、blkidは、同じUUIDと異なるUUID_SUBを持つ両方のドライブを一覧表示します。

SSDに関連するいくつかのマウントオプションを追加するだけで、/etc/fstabのマウントポイントをほとんど変更せずに残しました。

UUID=01234567-89ab-cdef-0123-456789abcdef / btrfs  defaults,noatime,nodiratime,discard  0   1

再起動後、システムはOSを完全に起動しました。上記のコマンドbtrfs filesystem showblkidは同じ結果を表示します。 RAID1が実行されているようです。

私の問題と私の質問

システムのコールドスタートの前に、[〜#〜] b [〜#〜](完全なデバイスエラーをシミュレート)を抜いたので、[〜#〜] a [〜#〜]が利用可能であり、BTRFSがまだ劣化モードで起動していると考えられていました。しかし、そうではありません。 initramfsがデバイスを見つけられないというエラーが発生します。

  1. それはBTRFSの予想される動作ですか、それとも私のinitramfsに何か問題がありますか? (多分それはBTRFSがオフライン中に1つのドライブが破壊されたと私に言っている方法です。)

    a。ドライブを1つだけで起動することは可能ですか[〜#〜] a [〜#〜]、新しいドライブをプラグイン(ホットスワップ)[〜#〜] c [〜 #〜]そしてオンラインで再同期しますか?

    b。 btrfs.wiki.kernel.org で、最初に故障したデバイスを劣化モードでマウントしてから、新しいデバイスを追加することが言及されています。それが唯一の方法ですか?

    (私自身への注意:私は別の裸のデバイスを接続することをテストします[〜#〜] c [〜#〜]そして何が起こるかを見てください。 wiki.ubuntuusers.de 。)

  2. ドライブ[〜#〜] b [〜#〜]も起動可能にするにはどうすればよいですか(ドライブ[〜#〜] a [〜#〜]が破壊された場合に備えて)? /bootは同期されていますか? GRUBをデバイスに[〜#〜] b [〜#〜]grub-install /dev/sdbでインストールするだけでいいですか、それとももっと何かする必要がありますか?

  3. Fstabでマウントオプションssdを使用すると便利ですか? btrfs.wiki.kernel.org が自動的に有効になると述べているように見えないためですか?私には、OSがSSDを正しく検出できない場合にのみ必要であるように思われます。

4
Pewpew

質問1への回答-1つのドライブに障害が発生した後に開始する方法

次の手順を実行することで、RAID1を復元できます。

  1. どういうわけかフォーマットされたドライブ(たとえば[〜#〜] c [〜#〜])を取り、同じSATAポートに接続しました不良ドライブ[〜#〜] b [〜#〜]は以前でした。

  2. その後、コンピューターを起動し、ブートメニューでeを押してコマンドを編集してから、次の方法で wiki.ubuntuusers.de に従ってブートしました。

    a。関連する開始エントリまでスクロールして、次の行を見つけました。

    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  01234567-89ab-cdef-0123-456789abcdef
    else
      search --no-floppy --fs-uuid --set=root 01234567-89ab-cdef-0123-456789abcdef
    fi
    echo    'Loading Linux 3.14-2-AMD64...'
    linux   /boot/vmlinuz-3.14-2-AMD64 root=UUID=01234567-89ab-cdef-0123-456789abcdef ro  quiet
    

    b。次に、行1を編集し、ドライブ番号を動作中のハードディスクに変更しました(私の場合はhd0のままですが、複数のドライブがまだ接続されている場合はhd1になる可能性があります)。

    set root='hd0,msdos1'
    

    c。先頭の文字#を追加してコメントにすることで、行2から6を非アクティブ化しました。

    #if [ x$feature_platform_search_hint = xy ]; then
    #  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  01234567-89ab-cdef-0123-456789abcdef
    #else
    #  search --no-floppy --fs-uuid --set=root 01234567-89ab-cdef-0123-456789abcdef
    #fi
    

    d。その後、行8を編集し、RAIDの劣化のためのルートフラグを挿入しました(rootflags=degraded):

    linux   /boot/vmlinuz-3.14-2-AMD64 root=UUID=01234567-89ab-cdef-0123-456789abcdef ro rootflags=degraded quiet
    

    e。キーF10を押して、編集したばかりのエントリを選択しました。システムが起動していました。

  3. OSを完全に起動した後、新しいドライブ[〜#〜] c [〜#〜]をRAID1に追加する必要がありました。言及 btrfs.wiki.kernel.org

    a。まだ動作しているドライブをマウントしました[〜#〜] a [〜#〜]

    mount -o degraded /dev/sda1 /mnt
    

    b。新しいドライブを追加しました[〜#〜] c [〜#〜]

    btrfs device add /dev/sdb1 /mnt
    

    c。その後、古いデバイスを削除しました(私の場合はドライブ[〜#〜] b [〜#〜]):

    btrfs device delete missing /mnt
    
  4. 最後に、上記の質問で述べたように、コマンドbtrfs filesystem showblkid、およびbtrfs fi df /mntですべてがうまくいくかどうかを確認しました。両方のドライブのUUIDは同じですが、UUID_SUBが異なり、モードRAID1であると報告されています。

    おめでとうございます、うまくいきました!

個人的なメモ

誰かが私を間違っていると証明するまで、失敗したinitramfsの記述された動作を期待どおりに扱います。たぶんそれは私に言う方法です、私のディスクがひどくクラッシュしたので今私は注意深く反応するべきです-しかしそれはただ推測です。

手作業による劣化の必要性に関する説明

その間に、 Linuxカーネル開発者のメーリングリスト でそのトピックに関連する興味深い議論を見つけました。関連性があるため、Duncanが書いた一節を引用したいと思います。これは、特に新規ユーザーにとって、知っておくことが非常に重要だと思います。

劣化したマウントオプションを使用して、1つのデバイスのみで2つのデバイスのbtrfs raid1ファイルシステムをマウントできるはずです。その場合、現在のカーネルは読み取り/書き込みマウントを拒否すると思います。そのため、次の場合まで読み取り専用アクセスが可能です。 btrfsデバイスは2つ目のデバイスを追加するため、通常のraid1モードをもう一度実行できます。 [...]一方、btrfsが実際にファイルシステムのすべてのコンポーネントを見つけることができれば、劣化したmount-optは実際には何もしないので、一部の人々は単に劣化したものを標準のマウントオプションに追加することを選択します(grubconfigを編集して追加します)起動するたびに)、心配する必要はありません。ただし、これは推奨されません。これは、劣化していないマウントの失敗が、システム管理者に非常に間違った問題が発生していることを警告し、修正する必要があるという通念があるためです。その後、必要に応じて、ファイルシステムをマウントして起動できるようにするために、一時的に劣化を追加できますが、起動のたびに定期的にオプションを追加すると、この重要な警告がバイパスされるため、管理者が無視する可能性が非常に高くなります。手遅れになるまで問題(またはそれについてまったく知らない)。

(出典: https://www.mail-archive.com/[email protected]/msg31265.html

追記:私の例のコンピューターにはスワップパーティションがありませんが、スワップパーティションを使用することをいとわない人々に、リンク先のこの非常に興味深いメールを読んでもらいたいと思います。 RAIDモードでBTRFSと交換します。


質問2への回答-他のドライブを起動可能にする方法

私が今まで知っていることに関しては、grub-install /dev/sdb(および追加のupdate-grub)を使用するだけでは十分ではないようです。なぜそう思うのか説明します。

オフラインで逆の方法を試したとき-ドライブのプラグを抜いて[〜#〜] a [〜#〜]、ドライブでのみ起動した[〜#〜] b [〜#〜]次のことが起こりました。ブートローダーGRUBが表示され、質問1のポイント2と同じ手順を実行しました。F10で確認した直後に、ブートプロセスが空白の画面ですぐに停止しました(アクティブなモニター、黒い背景、カーソルなし)。したがって、ドライブ上のブートローダーに明らかに問題があります[〜#〜] b [〜#〜](覚えておいてください:私はRAID 1を持っていて、最初のドライブが「故障」した後、2番目のドライブから起動できません。)

私はハードリセットを実行し、ドライブ[〜#〜] a [〜#〜]を再度接続して[〜#〜] a [〜#〜]および[〜#〜] b [〜#〜]両方が再び存在し)OSを起動します。私のドライブ[〜#〜] a [〜#〜][〜#〜] b [〜 #〜]は完全に同一です私はMBR全体(ブートローダーを含む)を作業ドライブ[〜#〜] a [〜#〜]から[〜#〜] b [〜#〜]dd if=/dev/sda of=/dev/sdb bs=512 count=1を使用したrawモード。以前のようにコンピュータをシャットダウンし、ドライブ[〜#〜] a [〜#〜]を抜いて、何が起こったのか推測しますか?劣化の手順を再度実行した後、最終的にドライブ[〜#〜] b [〜#〜]からのみOSを起動することができました。

要約すると、これがパーティションテーブル(GPTではなくMSDOS)に関係するのか、BTRFSなどと組み合わせたコマンドgrub-installに関係するのかはまだわかりません。また、生のコピーがgrub-installと比較した潜在的な欠点の次元もわかりません。 (たぶん誰かがこの答えの下のコメントでこれを少し明確にすることができます。)

私はまだその文脈で研究していることに注意してください、そして私はこの答えをもう一度更新します。もっと明確にしたいのですが、両方のドライブの MBRのセクターレイアウト の生のコードを調べて、問題がブートローダーにあるのか、それとも ディスクID


質問3への回答-マウントオプションssdの処理方法

これは、メインボードがドライブの状況を正しく通過できるかどうかによって異なります。 btrfs.wiki.kernel.org で述べたように、BTRFS自体はOSの値に依存しています。 OS内の他のモジュールもこれらの値に依存する可能性があるため、一般に/sys/block/sdX/queue/rotationalで適切な値(0:SSD、1:HDD)を確認することをお勧めします。値が適合する場合は、ssdオプションを残します。

4
Pewpew