疑難排解從錯誤的磁碟區開機的 Amazon EC2 Linux 執行個 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

疑難排解從錯誤的磁碟區開機的 Amazon EC2 Linux 執行個

在某些情況下,除了連接至 Linux 執行個體的磁碟區/dev/xvda或磁碟區以外的磁碟區/dev/sda會變成根磁碟區。這可能是因為您已經將另一個執行個體的根磁碟區,或是從根磁碟區快照所建立的磁碟區,連結到包含現有根磁碟區的執行個體。

這是 Linux 中初始記憶體虛擬磁碟 (ramdisk) 的運作方式所造成的。ramdisk 會選擇在 / 中定義為 /etc/fstab 的磁碟區,而在某些發行版本中,這取決於附加至磁碟區分割區的標籤。具體來說,您會發現 /etc/fstab 看起來類似於下列的內容:

LABEL=/ / ext4 defaults,noatime 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0

如果查看這兩個磁碟區的標籤,會發現皆包含 / 標籤:

[ec2-user ~]$ sudo e2label /dev/xvda1 / [ec2-user ~]$ sudo e2label /dev/xvdf1 /

在此範例中,最後可能是由 /dev/xvdf1 成為根設備,您的執行個體會在初始的 ramdisk 執行之後,透過此根設備啟動,而非透過您原本要從中啟動的 /dev/xvda1 磁碟區來啟動。為了解決這項問題,請使用同樣的 e2label 命令,針對您不想從其啟動的已連結磁碟區,來變更其標籤。

在某些情況下,指定 UUID in /etc/fstab 可以解決此問題。但是,如果兩個磁碟區都來自同一個快照,或是從主要磁碟區的快照建立次要磁碟區,則它們會共用UUID.

[ec2-user ~]$ sudo blkid /dev/xvda1: LABEL="/" UUID=73947a77-ddbe-4dc7-bd8f-3fe0bc840778 TYPE="ext4" PARTLABEL="Linux" PARTUUID=d55925ee-72c8-41e7-b514-7084e28f7334 /dev/xvdf1: LABEL="old/" UUID=73947a77-ddbe-4dc7-bd8f-3fe0bc840778 TYPE="ext4" PARTLABEL="Linux" PARTUUID=d55925ee-72c8-41e7-b514-7084e28f7334
更改已連結 ext4 磁碟區的標籤
  1. 使用 e2label 命令,將磁碟區的標籤變更為除了 / 以外的名稱。

    [ec2-user ~]$ sudo e2label /dev/xvdf1 old/
  2. 確認磁碟區已具有新的標籤。

    [ec2-user ~]$ sudo e2label /dev/xvdf1 old/
更改已連結 xfs 磁碟區的標籤
  • 使用 xfs_admin 命令,將磁碟區的標籤變更為除了 / 以外的名稱。

    [ec2-user ~]$ sudo xfs_admin -L old/ /dev/xvdf1 writing all SBs new label = "old/"

在如上述變更磁碟區標籤之後,您應該就能夠重新啟動執行個體,而且讓初始 ramdisk 在執行個體啟動時,選擇正確的磁碟區。

重要

如果您打算分離具有新標籤的磁碟區,並將該磁碟區傳回給另一個執行個體做為根磁碟區使用,則您必須再次執行上述的程序,以將磁碟區的標籤改回原來的值。否則,其他的執行個體就不會啟動,因為 ramdisk 找不到具有 / 標籤的磁碟區。