web-dev-qa-db-ja.com

mdadmソフトウェアRAIDは、initramfsステージの起動時に組み立てられません

まず、私は this を見つけて読んだことを述べたいと思います。

私は標準3.16カーネルでDebian Jessieを実行しています。 RAID1アレイを手動で定義しました。ただし、起動時に自動的にアセンブルされることはありません。したがって、systemdは、FS/etc/fstabに記述されている)をマウントしようとした後、劣化したシェルにフォールバックします。fstabのその行がコメント化されている場合、ブートプロセスは最後に進みますが、 RAIDアレイは利用できません。手動で組み立ててもエラーは発生しません。FSのマウントは簡単です。

手動でアセンブルすると、配列は次のようになります:

root@tinas:~# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active (auto-read-only) raid1 sdc1[0] sdd1[1]
      1953382464 blocks super 1.2 [2/2] [UU]
      bitmap: 0/15 pages [0KB], 65536KB chunk

unused devices: <none>

blkidコマンドの抜粋を示します:

/dev/sdd1: UUID="c8c2cb23-fbd2-4aae-3e78-d9262f9e425b" UUID_SUB="8647a005-6569-c76f-93ee-6d4fedd700c3" LABEL="tinas:0" TYPE="linux_raid_member" PARTUUID="81b1bbfe-fad7-4fd2-8b73-554f13fbb26b"
/dev/sdc1: UUID="c8c2cb23-fbd2-4aae-3e78-d9262f9e425b" UUID_SUB="ee9c2905-0ce7-2910-2fed-316ba20ec3a9" LABEL="tinas:0" TYPE="linux_raid_member" PARTUUID="11d681e5-9021-42c0-a858-f645c8c52708"
/dev/md0: UUID="b8a72591-040e-4ca1-a663-731a5dcbebc2" UUID_SUB="a2d4edfb-876a-49c5-ae76-da5eac5bb1bd" TYPE="btrfs"

fdiskからの情報:

root@tinas:~# fdisk -l /dev/sdc

Disque /dev/sdc : 1,8 TiB, 2000398934016 octets, 3907029168 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : gpt
Identifiant de disque : C475BEB1-5452-4E87-9638-2E5AA29A3A73

Device     Start        End    Sectors  Size Type
/dev/sdc1   2048 3907029134 3907027087  1,8T Linux RAID

ここでは、0xFDが期待されていることを読んだので、type値が正しい「Linux RAID」であるかどうかはわかりませんが、その値はGPTパーティションテーブルのあるfdiskからは利用できないようです。

ご協力いただきありがとうございます

編集:

journalctl -xbから1つのトレースを見つけることができます:

Apr 14 15:14:46 tinas mdadm-raid[211]: Generating udev events for MD arrays...done.
Apr 14 15:35:03 tinas kernel: [ 1242.505742] md: md0 stopped.
Apr 14 15:35:03 tinas kernel: [ 1242.513200] md: bind<sdd1>
Apr 14 15:35:03 tinas kernel: [ 1242.513545] md: bind<sdc1>
Apr 14 15:35:04 tinas kernel: [ 1242.572177] md: raid1 personality registered for level 1
Apr 14 15:35:04 tinas kernel: [ 1242.573369] md/raid1:md0: active with 2 out of 2 mirrors
Apr 14 15:35:04 tinas kernel: [ 1242.573708] created bitmap (15 pages) for device md0
Apr 14 15:35:04 tinas kernel: [ 1242.574869] md0: bitmap initialized from disk: read 1 pages, set 0 of 29807 bits
Apr 14 15:35:04 tinas kernel: [ 1242.603079] md0: detected capacity change from 0 to 2000263643136
Apr 14 15:35:04 tinas kernel: [ 1242.607065]  md0: unknown partition table
Apr 14 15:35:04 tinas kernel: [ 1242.665646] BTRFS: device fsid b8a72591-040e-4ca1-a663-731a5dcbebc2 devid 1 transid 8 /dev/md0

/ proc/mdstat起動直後、raid1モジュールがロードされていないことに気づきました!

root@tinas:~# cat /proc/mdstat 
Personalities : 
unused devices: <none>
root@tinas:~# 

したがって、raid1モジュールを/ etc/modulesに追加し、update-initramfs -uを発行しました。

これは対応するログです:

avril 15 12:23:21 tinas mdadm-raid[204]: Generating udev events for MD arrays...done.
avril 15 12:23:22 tinas systemd-modules-load[186]: Inserted module 'raid1'
avril 15 12:23:22 tinas kernel: md: raid1 personality registered for level 1

しかし、配列はまだ組み立てられていません:

root@tinas:~# cat /proc/mdstat 
Personalities : [raid1] 
unused devices: <none>

これは、udevイベントが生成された後にraid1モジュールがロードされたように見えるためでしょうか?

興味深いリンクだが一般的すぎる

私はdpkg-reconfigure mdadmを試しました:新しいものは何もありません...

誰かがudevからトレースを取得する方法を知っているなら、それは素晴らしいことです。 udev_log = info/etc/udev/udev.conf行のコメントを外しましたが、新しいものは何も表示されません...

ロードされたモジュールを検索する

root@tinas:~# grep -E 'md_mod|raid1' /proc/modules
raid1 34596 0 - Live 0xffffffffa01fa000
md_mod 107672 1 raid1, Live 0xffffffffa0097000

raid1は、/etc/modulesに追加したためにロードされました。それ以外の場合は、以前にロードされました。

name -r

root@tinas:~# uname -r 
3.16.0-4-AMD64

/ etc/mdadm/mdadm.conf

root@tinas:~# cat /etc/mdadm/mdadm.conf
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays
ARRAY /dev/md/0  metadata=1.2 UUID=a930b085:1e1a615b:93e209e6:08314607 name=tinas:0

# This configuration was auto-generated on Fri, 15 Apr 2016 11:10:41 +0200 by mkconf

私は奇妙なことに気づきました:/etc/mdadm/madm.confの最後の行はコマンドmdadm -Esによって自動生成され、手動で配列を組み立てているときに/ dev/md/というデバイスが表示されます。 mdadm --createで配列を作成するときに使用した/ dev/mdを取得します...

また、これらの情報は、詳細なupdate-initramsfsから取得しました。

Adding module /lib/modules/3.16.0-4-AMD64/kernel/drivers/md/raid10.ko
I: mdadm: using configuration file: /etc/mdadm/mdadm.conf
I: mdadm: will start all available MD arrays from the initial ramdisk.
I: mdadm: use `dpkg-reconfigure --priority=low mdadm` to change this.

したがって、私はそれを試しましたが、それは同じように失敗します:再起動後にアレイがありません。
/etc/mdadm/madm.confで、ARRAYデバイス名を/ dev/md/0からARRAY/dev/md0に変更しました
また、initramfs busybox内でmdadm --assemble --scanを発行した後、ARRAYが/ dev/md0として作成され、active(auto-read-only)とマークされていることにも気付きました。

17日

initramfsに気づきました。カーネルがRAMディスクを使用していることは知っていましたが、それ以上はわかりませんでした。私の理解では、このinitramfsはassembleユーザーランドでの起動時のRAIDアレイに必要なすべてのデータを含む必要があるということです。したがって、この静的ファイル/boot/initrd.img-versionを更新して、重要なすべての変更を反映することが重要です。

したがって、私は/boot/initrd.img-3.16.0-4-AMD64ファイルが乱雑であると疑い、次のコマンドを発行して新しいファイルを作成しようとしました:
#update-initramfs -t -c -v -k 3.16.0-4-AMD64
カーネルが1つしかないため、対応するinitramfsも1つしかありません。

しかし、再起動後、カーネルが/ dev/md0をマウントできなかったため、再びinitramfsシェルに直面しましたFS/etc/fstabで使用されます。

水曜日20日

私はbusyboxにいる間にサーバーの状態をすでにチェックしていました:

  • raid1モジュールがロードされている
  • Dmesgで興味深いものはありません
  • / run/mdadm/mapは存在しますが空です
  • journalctl -xbはそれを示します:
    • systemdが、アセンブルされていないアレイにFSをマウントしようとするとタイムアウトになることを報告します
    • systemdは、FSをfsckしようとすると、依存関係の失敗を報告します

ここに私の手動介入があります:

mdadm --assemble --scan

/proc/mdstatは、デバイス/ dev/md0がactiveおよびauto-read-onlyであると主張しています。だから私は発行します:

mdadm --readwrite /dev/md0

busyboxを終了する前。

5
Sun Wukong

ソフトウェアRAIDの上にfsを作成する代わりに、btrfs自体でドライブをミラーリングできます:mkfs.btrfs -d raid1 /dev/sdc /dev/sdd

そうでなければ:

    umount /dev/md0 if mounted
    mdadm --stop /dev/md0
    mdadm --assemble --scan
    mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.bak
    /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf

cat /proc/mdstatは正しい出力を表示し、ファイルシステムを作成してマウントします。blkidを使用して/ dev/md0のUUIDを取得し、それに応じて/ etc/fstabを編集します。

それでも問題が解決しない場合は、上記の手順に進む前にこれを試すことができます。

    mdadm --zero-superblock /dev/sdc /dev/sdd
    mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1

3.16.0-4-AMD64カーネルを搭載したDebian Jessieを実行しているシステムでこれをテストし、ミラーリングした2つのブロックデバイスにgptパーティションテーブルを書き込みました。アレイは起動時に適切に組み立てられ、指定どおりにマウントされます。

3
neofug