ボックスはUbuntu 16.04を実行しているHPマイクロサーバーです。最近、ブートデバイスを64GB SSDに「アップグレード」しました。 1TB SATAドライブもあります。
/dev/sda1
通常、SSDのプライマリパーティションとして起動し、/dev/sda5
パーティションをスワップし、/dev/sdb1
にマウントされている1Tb HDDのパーティションを指します/mnt/media0
。
問題は時々すべてが変わるということです。今SSDは、/dev/sdb1
メディア/dev/sdb5
パーティションは今です/dev/sda1
。
/etc/fstab
もちろん、これはスワップとメディアマウントが以前の名前の下にリストされているため失敗します/dev/sd*
。
だから私は持っています:
BIOSを確認しましたが、常に64GB SSDが最初のドライブとして表示され、1TB IDEが2番目のドライブとして表示されます。
ボリュームラベルでメディアドライブを参照するように変更しようとしましたが、
/etc/fstab
これはUbuntuを起動せずに回復モードに切り替えました。スワップおよび(ext4)メディアパーティションを参照するためにUUIDを使用するように変更しようとしました
/etc/fstab
(実際のデフォルトパーティションがリストされています)。しかし、それから二番目の問題にぶつかりました。
各パーティションのUUIDを見つけるために次のコマンドを実行すると...
ls /dev/disk/by-uuid
blkid
どちらも最初のエントリ(プライマリパーティションのUUID)のみを一覧表示します。使用されているメディアパーティションのUUIDのみが表示されます(実際に起動時に割り当てられているsdb1
ようです)。
tune2fs -l /dev/sdb1
ただし、対応するUUIDを使用すると、/etc/fstab
Ubuntuは起動せずに回復モードに入ります。
だから私の質問は次のとおりです。
ドライブ間の交換をインポートして停止する
/dev/sda
方法はありますか?/dev/sdb
別のパーティションのUUIDをシステムに表示させるにはどうすればよいですか
fstab
?そして/またはスワップとメディアパーティションを確実にマウントする他の方法はありますか?
答え1
で「ディスク/ID別」名を使用できます/etc/fstab
。
ls -l /dev/disk/by-id
これらのデバイス名は、他のファイル(initrd、grub config)でも使用できます。したがって、grub設定を更新してinitrdを再生成することもできます。
答え2
他のカーネルはudevをサポートし、他のカーネルはudev(eudev)をサポートしていないので、ハードドライブを交換し続けます!
はい、sysv、openrc、およびs6 initの交換(systemdの交換)を試み始めたときにも、この問題が困難になりました。
問題は、同じディスク上に異なるLinux vmlinuzイメージをビルドすると、grubユーティリティとその構成ファイルにあります。特に、1つのカーネルビルドでは有効になり、他のカーネルビルドでは有効になっていない場合GRUB_DISABLE_LINUX_UUID
(/etc/default/grub
など)に問題があります。
==理由#1==
だから…犯人は誰ですか?古いビシステム。 Non-systemdは、どのSATA / IDEコネクタが使用されているかに関係なく、sdaドライブが常に起動ディスクラベルになるようにスワップを実行します。
ドライブの位置合わせはATA(SATAまたはlibataライブラリ)デバイスによって行われ、並べ替えはファイルから削除されますdrivers/scsi/ida_probe()
。GRUB_DEVICE_BOOT
/etc/default/grub
==理由#2==
CONFIG_SCSI_DEBUG
「yes」(または「vmlinuzブートパラメータで」でinitramfsを使用している場合は「m」)を指定するscsi_debug=add_host:1
と、既存のハードドライブの「sd」タグインデックスのインデックス番号が1ずつ上がります。つまり、にsda1
なりますsdb1
。