
該盒子是一台 HP 微型伺服器,運行 Ubuntu 16.04。我最近將啟動裝置「升級」為 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 列為第二個驅動器。
我嘗試更改
/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
?和/或有沒有其他方法可以可靠地安裝我的交換和媒體分區?
答案1
您可以在 中使用“disk/by-id”名稱/etc/fstab
,請參閱
ls -l /dev/disk/by-id
請注意,這些設備名稱也可能在其他檔案(initrd、grub 配置)中使用。因此,您也可以更新 grub 設定並重新建立 initrd。
答案2
它不斷交換硬碟,因為不同的核心有 udev 支持,而其他核心沒有 udev (eudev) 支援!
是的,當我開始嘗試 sysv、openrc 和 s6 init 替換(systemd 替換)時,我也被這個問題困擾了。
問題在於 grub 實用程式及其在同一磁碟中建置不同 Linux vmlinuz 映像時的設定文件,特別是在為一個核心建置而不是其他核心建置啟用GRUB_DISABLE_LINUX_UUID
(/etc/default/grub
等)時。
==原因#1==
那麼……罪魁禍首是誰?較舊的非 systemd。非 systemd 會進行交換,使 sda 磁碟機始終成為起始磁碟標籤,無論使用哪個 SATA/IDE 連接器。
磁碟機排序由 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”標籤索引的索引號碼推高一:即,您的sda1
變為sdb1
.