簡介
計(jì)算機(jī)的文件系統(tǒng)是一種存儲和組織計(jì)算機(jī)數(shù)據(jù)的方法,它使得對其訪問和查找變得容易个束,文件系統(tǒng)使用文件和樹形目錄的抽象邏輯概念代替了硬盤和光盤等物理設(shè)備使用數(shù)據(jù)塊的概念慕购,用戶使用文件系統(tǒng)來保存數(shù)據(jù)不必關(guān)心數(shù)據(jù)實(shí)際保存在硬盤(或者光盤)的地址為多少的數(shù)據(jù)塊上,只需要記住這個文件的所屬目錄和文件名播急。
在使用中, 會遇到文件系統(tǒng)損壞的故障, 直接導(dǎo)致 Azure 平臺的虛擬機(jī)無法正常啟動和訪問, 以下是關(guān)于此類問題的描述及解決方法.
關(guān)于文件系統(tǒng),詳情參見如下:
注意:本文檔討論的文件系統(tǒng)以 CentOS 作為范例, 其他版本的 Linux 略有不同, 請注意差別.
文件系統(tǒng)損壞常見問題
范例1:
復(fù)制
Checking all file systems.
[/sbin/fsck.ext4 (1) -- /] fsck.ext4 -a /dev/sda1
/dev/sda1? contains a file system with errors, check forced .
/dev/sda1: Inodes that were part of a corrupted orphan linked list found.
/dev/sda1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY
范例2:
復(fù)制
EXT4-fs (sda1): INFO: recovery required on readonly filesystem
EXT4-fs (sda1): write access will be enabled during recovery
EXT4-fs warning (device sda1): ext4_clear_journal_err:4531: Filesystem error recorded from previous mount: IO failure
EXT4-fs warning (device sda1): ext4_clear_journal_err:4532: Making fs in need of filesystem check .
解決方案之 root 文件系統(tǒng)損壞
A = 文件系統(tǒng)故障所在的虛擬機(jī)
B = 臨時虛擬機(jī)
在 Azure 經(jīng)典管理門戶上停止運(yùn)行虛擬機(jī) A.
在同一個 cloud service 里創(chuàng)建一臺臨時 Linux 虛擬機(jī) B.
刪除虛擬機(jī) A, 但是選擇保留磁盤.
在 Azure 經(jīng)典管理門戶上,選擇虛擬機(jī) B -> 附加磁盤 -> 選擇虛擬機(jī) A 的系統(tǒng)磁盤.
以管理員身份登陸虛擬機(jī) B.
執(zhí)行:# fdisk -l
確認(rèn)虛擬機(jī) A 的系統(tǒng)磁盤作為新的磁盤設(shè)備附加在虛擬機(jī) B 上.假定虛擬機(jī)A的系統(tǒng)磁盤為 /dev/sdc, root 文件系統(tǒng)為 /dev/sdc1
執(zhí)行以下步驟, 進(jìn)行備份文件系統(tǒng)信息:
復(fù)制
# fdisk -l /dev/sdc > /var/tmp/fdisk_before.log
# dumpe2fs /dev/sdc1 > /var/tmp/dumpe2fs_before.log
# tune2fs -l /dev/sdc1 > /var/tmp/tune2fs_before.log
# e2fsck -n /dev/sdc1 > /var/tmp/e2fsck._beforelog
執(zhí)行以下命令, 進(jìn)行文件系統(tǒng)修復(fù):
復(fù)制
# fsck -yM /dev/sdc1
解決方案之常規(guī)文件系統(tǒng)損壞
A = 文件系統(tǒng)故障所在的虛擬機(jī)
B = 臨時虛擬機(jī)
在 Azure 經(jīng)典管理門戶上停止運(yùn)行虛擬機(jī) A.
在同一個 cloud service 里創(chuàng)建一臺臨時 Linux 虛擬機(jī) B.
刪除虛擬機(jī) A, 但是選擇保留磁盤.
在 Azure 經(jīng)典管理門戶上,選擇虛擬機(jī) B -> 附加磁盤 -> 選擇虛擬機(jī) A 的系統(tǒng)磁盤.
以管理員身份登陸虛擬機(jī) B.
執(zhí)行:# fdisk -l
確認(rèn)虛擬機(jī) A 的系統(tǒng)磁盤作為新的磁盤設(shè)備附加在虛擬機(jī) B 上.假定虛擬機(jī) A 的系統(tǒng)磁盤為 /dev/sdc, root 文件系統(tǒng)為 /dev/sdc1
執(zhí)行如下命令,將虛擬機(jī)A的系統(tǒng)磁盤掛載到臨時虛擬機(jī)上:
復(fù)制
# mkdir /mnt/temp_fs
# mount /dev/sdc1 /mnt/temp_fs
# cp /mnt/temp_fs/etc/fstab /mnt/temp_fs/etc/fstab.org
# vi /mnt/temp_fs/etc/fstab
將文件系統(tǒng)損壞的條目注釋掉,保存修改, 退出 vi.
# umount /dev/sdc1
在 Azure 經(jīng)典管理門戶上分離虛擬機(jī) A 的系統(tǒng)磁盤.
在 Azure 經(jīng)典管理門戶上基于虛擬機(jī) A 的系統(tǒng)磁盤, 重建虛擬機(jī) A.
以管理員身份登錄虛擬機(jī) A.
執(zhí)行以下命令, 進(jìn)行文件系統(tǒng)修復(fù):
復(fù)制
# fsck -yM ;
文件系統(tǒng)修復(fù)完畢以后, 恢復(fù) /etc/fstab 被注釋的對應(yīng)條目, 重啟虛擬機(jī).
立即訪問http://market.azure.cn