

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

# 從錯誤磁碟區對 Amazon EC2 Linux 執行個體開機進行疑難排解
從錯誤磁碟區啟動 Linux 執行個體

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

這是 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** 命令，針對您不想從其啟動的已連結磁碟區，來變更其標籤。

在某些情況中，在 `/etc/fstab` 中指定 UUID 可以解決這項問題。不過，如果兩個磁碟區都來自於相同的快照，或次要的磁碟區是從主要磁碟區的快照建立，兩個磁碟區就會共用一個 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/ 
   ```

1. 確認磁碟區已具有新的標籤。

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

**更改已連結 xfs 磁碟區的標籤**
+ 使用 **xfs\$1admin** 命令，將磁碟區的標籤變更為除了 `/` 以外的名稱。

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

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

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