web-dev-qa-db-ja.com

ハードドライブを取り外すと、DebianソフトウェアRAID1が機能しません

私は週末中ずっと、RAID1を備えたデュアルハードドライブを実行しているIntelICH7/ICH7-RSATA-IIコントローラーを備えた古いサーバーコンピューターでRAIDを動作させることを試みてきました。

ハードウェアRAIDをあきらめた後、私はソフトウェアに移りました。

現在、システムは両方のドライブから正常に起動し、sdbから正常に起動しますが、sdaを起動しようとすると、黒い画面にカーソルが点滅します。

これは、ドライブを物理的に取り外すことを意味します。ドライブを1つ取り外して起動すると、機能します。そのドライブを交換し、もう一方のドライブを取り外して起動すると、機能しません。

私の推測では、sdaにGRUBを正しくインストールしていません。

Sdbハードドライブを取り外し、インストールディスクをリカバリモードで起動します。次に、RAIDボリュームをマウントし、シェルに入ります。

まず、ソフトウェアRAIDについて私が従ったことを試してみます このチュートリアル 次のように指示されました。

# grub
grub> device (hd0) /dev/sda

grub> root (hd0,0)
 Filesytem type is ext2fs, partition type 0xfd

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists ... no
 Checking if "/grub/stage1" exists ... no

Error 2: Bad file or directory type

だから私は別のことを試みます:

入力時:

grub-install /dev/sda

私は得る

Searching for the GRUB installation directory ... found: /boot/grub
The file /boot/grub/stage1 not read correctly.

Ext4パーティションを使用しています。

次に何をしようか?

編集:

これがfdisk -lの出力です

root@debian:~# fdisk -l

    Disk /dev/sda: 153.4 GiB, 164696555520 bytes, 321672960 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x8225e6c2

    Device     Boot   Start       End   Sectors   Size Id Type
    /dev/sda1  *       2048    194559    192512    94M fd Linux raid autodetect
    /dev/sda2        194560   4194303   3999744   1.9G fd Linux raid autodetect
    /dev/sda3       4194304 321671167 317476864 151.4G fd Linux raid autodetect

    Disk /dev/sdb: 153.4 GiB, 164696555520 bytes, 321672960 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x3cfa42ad

    Device     Boot   Start       End   Sectors   Size Id Type
    /dev/sdb1  *       2048    194559    192512    94M fd Linux raid autodetect
    /dev/sdb2        194560   4194303   3999744   1.9G fd Linux raid autodetect
    /dev/sdb3       4194304 321671167 317476864 151.4G fd Linux raid autodetect

    Disk /dev/md2: 151.3 GiB, 162413936640 bytes, 317214720 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/md0: 93.9 MiB, 98435072 bytes, 192256 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/md1: 1.9 GiB, 2046820352 bytes, 3997696 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

これがmdadm --detail --scanの出力です

ARRAY /dev/md/2 metadata=1.2 name=repeater:2 UUID=cd8443a8:ca0b3a29:05496e49:b063704f
ARRAY /dev/md/0 metadata=1.2 name=repeater:0 UUID=c8a204e2:3e5a5e2c:50a136c7:d43777a7
ARRAY /dev/md/1 metadata=1.2 name=repeater:1 UUID=25bebb1e:c7f3245d:128bee5d:d58d9100

これがlsblkの出力です

NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
fd0       2:0    1     4K  0 disk  
sda       8:0    0 153.4G  0 disk  
├─sda1    8:1    0    94M  0 part  
├─sda2    8:2    0   1.9G  0 part  
└─sda3    8:3    0 151.4G  0 part  
  └─md2   9:2    0 151.3G  0 raid1 /
sdb       8:16   0 153.4G  0 disk  
├─sdb1    8:17   0    94M  0 part  
│ └─md0   9:0    0  93.9M  0 raid1 /boot
├─sdb2    8:18   0   1.9G  0 part  
│ └─md1   9:1    0   1.9G  0 raid1 [SWAP]
└─sdb3    8:19   0 151.4G  0 part  
sr0      11:0    1  1024M  0 rom 

編集2:これがcat /proc/mdstatの出力です

root@debian:~# cat /proc/mdstat
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sdb2[1]
      1998848 blocks super 1.2 [2/1] [_U]

md0 : active raid1 sdb1[1]
      96128 blocks super 1.2 [2/1] [_U]

md2 : active raid1 sda3[0]
      158607360 blocks super 1.2 [2/1] [U_]
      bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none>
2
Skyler 440

Lsblkの出力と/ proc/mdstatから、すべてのRAIDが劣化していることがわかります。 [_U]または[U_]を参照してください?各RAIDでは、1つの行のみが入力され(Uでマーク)、もう1つの行は入力されません(_でマーク)。

したがって、私の推測は正しかったようです。通常の/ bootファイルシステムは1つのドライブにのみあり、現在はsdbと呼ばれています。あなたのsdaには同じ目的のパーティションがありますが、そのパーティションには有効で正しく設定されたブートファイルシステムが含まれていないようです。

両方のドライブに問題がないことが確実な場合は、それらをレイドに再度追加できます。未使用のパーティションからmdraidスーパーブロックをワイプする必要があります。アクティブなドライブからラベルをワイプしようとすると、mdadmツールは文句を言いますが、それでもコマンドを再確認する価値があります。/proc/mdstatとfdiskの出力から、次のことが推測されます。

  • md0(ブート)はsda1とsdb1にあるはずですが、sdb1だけが機能しています。
  • md1(スワップ)はsda2とsdb2にあるはずですが、sdb2だけが機能しています。
  • md2(ルート)はsda3とsdb3にあるはずですが、sda3だけが機能しています-これは奇妙なことですが、これは別のディスクにあります。

Sda1、sda2、sdb3(現在すべて未使用)からラベルをワイプするには、次を使用します。

mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sda2
mdadm --zero-superblock /dev/sdb3

何か文句を言うかもしれませんし、コマンドに--forceを追加する必要があるかもしれませんが、それは必要ないと思います。もう一度話しますが、すべてを再確認して、未使用のデバイスでのみレイドマークを消去してください。

次に、これらの未使用のデバイスをアレイに追加します。

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sdb3

バックグラウンドで再同期を開始します。また、すべてのアレイが同じデバイスを使用していることを検出するため、たとえば、md1が完了するまでmd2の再同期を遅らせることに注意してください。/proc/mdstatに再同期の進行状況が表示されます。

再同期が完了すると、/ proc/mdstat内のすべてのデバイスの後に[UU]が表示され、これらのアレイが最適な状態にあることを示します。

/ bootが機能するため、sdb1には正しく入力されたファイルシステムが含まれています。/boot md0が最適な状態にあるとき、sda1は同じデータを持っていると言えます(同じアレイ内の異なるバッキングデバイスは異なる行番号を持っているため、スーパーブロックのみがわずかに異なります)。手作業でgrubを再インストールできます。

device (hd0) /dev/sda
root (hd0,0)
setup (hd0)

ドライブの読み取りエラーを早期にキャッチするために、定期的に(たとえば、週に1回または月に1回)アレイチェックを実行するようにmdadmを設定することを強くお勧めします。私はかつて、両方のRAIDドライブに不良ブロックが(異なる場所に)ある場合の問題を解決しました。定期的なチェックにより、ファイルシステムのめったに使用されない部分に不良ブロックがある場合でも、障害のあるドライブを早期に排出することでこの問題を回避できます。それはトリッキーでした。チェックを開始するには、

echo "check" >> /sys/block/md127/md/sync_action

dmesgおよびmdmonログでエラーを探します。

しないでください単に他のデバイスにファイルシステムをddブートします。同じラベルと同じUUIDを持つ2つのファイルシステムは正常な状態ではありません。これは、リカバリまたはその他のフォレンジックプロセス中に一時的に発生することが許可されていますが、通常実行されている/ bootでは許可されていません。 UbuntuはUUIDによってパーティションをマウントします(/ etc/fstabを確認してください)。次にマウントされるのはどれでしょうか。言う方法はありません、これはランダムですが、これはランダムであるとは考えられていません。

RAIDバッキングデバイスへのアクセスは、カーネルのmdコードによっていくらかブロックされているため、RAID中は、システムは単一のデバイスであるmd0のみを認識し、問題は発生しません。

両方のディスクで非RAID/bootを維持するには、基本的に、ブートを更新するたびにファイルシステムのクローンを作成し、常にUUIDとラベルを変更する必要があります。これはエラーが発生しやすく、不便です。/bootをRAID1として使用するのが普通です。

/ bootにはメタデータ1.0を使用することをお勧めします。この場合、メタデータはデバイスの最後に配置されるため、RAIDサポートがない場合でも、パーティションからファイルシステムをマウントすることができます。まったく襲撃。しかし、それが今あなたのために働くならば、今のままにしておく方が良いです。

1

両方ディスクにブートローダー(grub stage1)をインストールする必要があります。ブートローダーはパーティションの外部にあり、MDRAIDアレイの外部にあるため、手動で行う必要があります。

次のコマンドを発行してください:grub-install /dev/sdaそして再起動を再試行しますsda

0
shodanshok