sda 和 sdb 不斷交換
這個盒子是一個執行 Ubuntu 16.04 的 HP 微伺服器。我最近將引導設備“升級”到了 64GB SSD。此外還有一個 1TB SATA 驅動器。
通常它
/dev/sda1
作為主分區(在 SSD 上)和/dev/sda5
作為交換啟動,並/dev/sdb1
指向 1Tb 硬碟上的分區,該分區掛載到/mnt/media0
.問題是,它有時會改變這一切,SSD 現在是
/dev/sdb1
,/dev/sdb5
媒體分區現在是/dev/sda1
.當然,這會導致交換和媒體安裝失敗,因為它們
/etc/fstab
使用以前的/dev/sd*
名稱列出。所以我有:
- 檢查 BIOS,它始終將 64GB SSD 列為第一個驅動器,將 1TB IDE 列為第二個。
- 我嘗試更改
/etc/fstab
為按卷標引用媒體驅動器,但這會導致 Ubuntu 在啟動時失敗並使我進入恢復模式。- 我嘗試更改
/etc/fstab
以使用 UUID 引用交換和(ext4)媒體分區(事實上,它列出了主分區),但我遇到了第二個問題。當我執行以下操作以查找各個分區的 UUID…
ls /dev/disk/by-uuid blkid
兩者都只列出 1 個條目——主分區的 UUID。我只能看到媒體分區的 UUID 使用(在啟動時它確實如此,事實上,
sdb1
顯然被分配了)tune2fs -l /dev/sdb1
但同樣,如果我在其中使用該 UUID,
/etc/fstab
則 Ubuntu 無法啟動並進入恢復模式。所以,我的問題是:
- 有什麼方法可以獲取
/dev/sda
和/dev/sdb
停止驅動器之間的交換?- 如何讓系統查看其他分區的 UUID,以便我可以在其中使用它們
fstab
?- 和/或有沒有其他方法可以可靠地安裝我的交換和媒體分區?
您可以在 中使用“磁碟/按 ID”名稱
/etc/fstab
,請參閱ls -l /dev/disk/by-id
請注意,這些設備名稱也可能用於其他文件(initrd、grub 配置)。所以你也可以更新你的 grub 配置並重新創建 initrd。
它不斷交換硬碟驅動器,因為不同的核心有 udev 支持而其他核心沒有 udev (eudev) 支持!
是的,當我開始嘗試使用 sysv、openrc 和 s6 init 替換(systemd 替換)時,我也被這個問題困擾了。
問題在於 grub 實用程序及其在同一磁碟中建構不同的 Linux vmlinuz 映像時的配置文件,特別是在為一個核心建構而不是其他核心建構啟用
GRUB_DISABLE_LINUX_UUID
(/etc/default/grub
等)時。== 原因 #1 ==
那麼……誰是罪魁禍首?較舊的非系統化。無論使用哪個 SATA/IDE 連接器,非 systemd 都會進行交換以使 sda 驅動器始終作為起始磁碟標籤。
驅動器排序由 ATA(SATA 或 libata 庫)設備完成,重新排序由
drivers/scsi/ida_probe()
.GRUB_DEVICE_BOOT
從您的/etc/default/grub
文件中刪除它。== 原因 #2 ==
指定
CONFIG_SCSI_DEBUG
為“yes”(如果scsi_debug=add_host:1
在您的 vmlinuz 引導參數中使用帶有“”的 initramfs,則指定為“m”)肯定會將現有硬碟驅動器的“sd”標籤索引的索引號推一:即,您的sda1
變為sdb1
.