web-dev-qa-db-ja.com

16.04LTSで劣化したRAID1ブートを有効にする方法

以前のバージョンのubuntuでは、BOOT_DEGRADED=true/etc/initramfs-tools/conf.d/mdadmに追加すると、ルートファイルシステムが劣化したアレイ上にあるときにシステムが自動的に起動できました。これは、16.04 LTSでは動作しなくなったようです。

ドキュメント( https://help.ubuntu.com/lts/serverguide/advanced-installation.html )は古いようです。 Sudo dpkg-reconfigure mdadmは、低下したブートを許可するように要求しなくなり、bootdegraded=trueカーネル引数も機能しなくなったようです。ルートファイルシステムアレイが劣化すると、システムは常にinitramfsで起動します。そこから、mdadm -IRsでシステムを起動できます。

ルートファイルシステムが16.04LTSの劣化したRAID1アレイにある場合、自動ブートを有効にするにはどうすればよいですか?

14
vdyvp

上記のバグはmdadm 3.3-2ubuntu7に現れ、3.4-2で修正されました。

Yakkety(16.10)3.4-4の最新のmdadmリリースにはすでに修正が含まれており、16.10では使用可能ですが、16.04LTSでは(まだ?)使用できません。

したがって、16.04LTSのmdadmを手動でアップグレードしました。

wget http://launchpadlibrarian.net/275652884/mdadm_3.4-4_AMD64.deb
Sudo dpkg -i mdadm_3.4-4_AMD64.deb

私を確認するには

  • コンピューターを終了させて​​下さい
  • ディスク/ ssdの1つを抜いた
  • コンピューターの電源を入れます

コンソールの観察:劣化したRAIDアレイからのブートは機能します

バグ: https://bugs.launchpad.net/ubuntu/+source/mdadm/+bug/1635049https://bugs.debian.org/cgi-bin/bugreport。 cgi?bug = 78407

9
Jan Dev

根本的な原因は/usr/share/initramfs-tools/scripts/local-top/mdadmスクリプトがないことです。Debian-8ではmdadmパッケージに含まれていますが、Ubuntu-16.04の同じパッケージでは失われました;-(

そのため、ダーティハックバージョンを作成してinitramfsを再作成した後、テスト用のUbuntu-16.04 LTSサーバーは、RAID1アレイの2番目のHDDのみを使用して完全に起動できました。

#!/bin/sh
# 2016-07-13 [email protected] - missed mdadm script for Ubuntu-16.04
# see debian8_Host:/usr/share/initramfs-tools/scripts/local-top/mdadm for full version

MDADM=/sbin/mdadm 
. /scripts/functions

echo "===>"
cat /proc/mdstat
echo "===>"
log_begin_msg "Assembling all MD arrays"
if $MDADM --assemble --scan --run --auto=yes
then
  log_success_msg "assembled all arrays."
else
  log_warning_msg "failed to assemble all arrays, attempting individual starts"
  for dev in $(cat /proc/mdstat | grep md | cut -d ' ' -f 1)
  do
    log_begin_msg "attempting mdadm --run $dev"
    if $MDADM --run $dev; then
      log_success_msg "started $dev"
    else
      log_failure_msg "failed to start $dev"
    fi
  done
fi
log_end_msg
echo "===>"
cat /proc/mdstat
echo "===>"

sleep 5

# TODO: run mdadm --readwrite /dev/mdN
# if array is in 'auto-read-only' mode
1
Andrey Kopeyko

16.04でも同じ問題が発生しました。レイドアレイは、劣化モードでアクティブになるのを単純に拒否しました。

ここに簡単な回避策があります:

  1. 新しいファイルを作成:/ etc/initramfs-tools/scripts/init-premount/delay_mounting(+ xを設定することを忘れないでください)

追加

sleep 2(または好きな秒数)

  1. 新しいファイルを作成:/ etc/initramfs-tools/scripts/local-top/mdadm(+ xを設定することを忘れないでください)

以下を追加します(/ dev/md0、/ dev/md1、および/ dev/md2がある場合、強制的に配列を開始します)

mdadm --run/dev/md0
mdadm --run/dev/md1
mdadm --run/dev/md2

それから

pdate-initramfs -k all -の場合、すべて設定されています。

14.04には1)のみが必要ですが、両方を実行しても害はないことに注意してください。以下のような警告メッセージが表示される場合があります。

mdadm:アレイ/ dev/md0の実行に失敗しました:デバイスまたはリソースがビジーです

これは無害です。/dev/md0がアクティブであるため、必要なときにのみ--runを実行するだけで、よりスマートなスクリプトを確実に記述できるからです。

0
Ying-Hung Chen

ここの他の回答には問題を解決するための回避策がありますが、これはUbuntuのバグであり、修正する必要があります。バグは次のとおりです。 https://bugs.launchpad.net/ubuntu/+source/mdadm/+bug/1635049

以前に修正されました: https://wiki.ubuntu.com/ReliableRaid

0
Grant Slater