作者 | JackTian
來源 | 公眾號:杰哥的IT之旅(ID:Jake_Inte.NET)
前段時間遇到一個服務器問題: 非法重啟設備后,服務器進入救援模式,數據盤也不顯示掛載是否成功。
說來這個問題,我覺得還挺奇葩。今天就來跟大家分享下整個過程以及我的處理方法。避免大家在今后的學習或工作中遇到跟我同樣的問題。
一、問題背景
有一天,研發小伙伴跟我反饋有一臺服務器連不上,一直卡在如下頁面。
該頁面是 Xshell 連接某一臺服務器時,建立的連接,按 Ctrl+Alt+] 鍵切換到本地 Shell 終端。當我看到卡在該頁面時,毫無猶豫的自己也嘗試了起來,果然也是連不上。前一天還正常連接,第二天就出問題了?
還好服務器有配置遠程管理地址,通過遠程控制管理頁面的方式啟動 iKVM html5 和遠程管理服務器,這樣就能登到這臺出故障的設備上查看服務器界面處于一種什么樣的狀態。

登到這臺故障的服務器后,直接重啟了服務器,然后 Xshell 再次嘗試連接,是可以遠程連接的。難道這就是傳說中的重啟治百病,如此簡單粗暴?

當進入系統后,執行簡單的命令都提示輸入/輸出錯誤。
過不久后,直接不建立連接了,徹底掛了。。。

再通過遠程控制管理頁面查看服務器當前狀態,一看進入到救援模式了。
到該模式下后,
- 輸入 journalctl -xb 命令,可查看系統日志
- 輸入 systemctl reboot 命令,重啟系統
- 輸入 systemctl default 或 ^D 命令,再次嘗試進入默認模式
- 輸入 root 用戶密碼,則可以進入系統
根據日志報錯提示:掛載文件系統可以糾正該問題。
二、解決方案
執行 df -h 命令,用于在 linux 操作系統下顯示文件系統的磁盤使用情況。
使用 -h 選項以 KB 以上的單位來顯示,可讀性高。
- 第一列: Filesystem 文件系統的名稱
- 第二列: Size 文件系統的容量
- 第三列: Used 已用多少的磁盤空間
- 第四列: Avail 可用多少的磁盤空間
- 第五列: Use% 磁盤使用率
- 第六列: Mounted On 掛載點

根據上圖結果來看,沒有 /dev/sdb1 文件系統所掛載的 /bigdata 目錄磁盤情況。
嘗試將 /dev/sdb1 取消掛載,重新掛載,反復報不同的錯誤。
通過 RAID 卡管理界面查看狀態也是 Online。
當如果重啟設備,能看到如下界面,則說明正在初始化設備。
恰巧,這臺故障的服務器有多塊硬盤組成的 44T 的一個目錄有存放 46% 的數據,在有數據的情況下,如何不格式化磁盤重新掛載呢?

取消掛載
umount/dev/sdb1
嘗試修復
若不確定掛載點屬于哪種文件類型時,可以執行: df -Th 命令來判斷。

如果掛載點為 xfs 文件類型 ,可以執行: xfs_repair -L + 文件系統名稱路徑 命令進行修復。
如果掛載點為 fsck.ext2/3/4文件類型 ,可以執行: fsck.ext2/3/4文件類型 + 文件系統路徑 命令進行修復。
因為我這是 xfs 的文件類型,按 xfs_repair 命令來修復受損的 xfs 文件系統,執行如下命令進行修復 /dev/sdb1 。
xfs_repair-L /dev/sdb1
執行修復是根據磁盤中的數據使用率來決定修復時長的,所以時間會較長,我采用放后臺的形式執行的,執行完成后,查看還是否有進程存在,如有則說明未修復完,如沒有則說明修復完成,然后 再重新掛載。
mount/dev/sdb1 /bigdata
掛載完畢后,執行df -h 命令來確定是否掛載成功。
到此,就恢復掛載完畢了。
上面案例是針對磁盤有數據時且不格式化的情況下恢復并掛載。
那么有小伙伴該問了,無存儲數據的情況下,如何掛載磁盤,我這里也給大家整理出來一個詳細的操作步驟:
第一步:
ll /dev/disk/ by-path # 查看需要掛的磁盤名稱
fdisk -l # 查看磁盤信息
lsblk # lsblk 命令默認情況下將以樹狀列出所有塊設備,包括查看磁盤掛載信息
第二步:
parted/dev/sdb mklabel gpt # 新建 /dev/sdb 的磁盤標簽類型為 GPT
parted /dev/sdb mkpart primary 0100% # 將 /dev/sdb 整個空間分給同一個分區
ignore # 忽略上述執行命令后的告警
mkfs.xfs -f /dev/sdb # 格式化分區
注意:格式化分區可能會執行慢些,需耐心等待。
第三步:
mkdir/bigdata # 創建目錄,自定義目錄名
mount /dev/sdb /bigdata # 將 sdb 掛載到 /bigdata 目錄下
第四步:
blkid# 查看 sdb 的 UUID 并復制
第五步:
vi/etc/fstab # 參考已掛載的磁盤,將 sdb 的 UUID 和掛載目錄關聯上,保存后重啟設備
注意:UUID 一定要寫對,否則重啟后無法正常進入系統。
第六步:
df-h # 檢查是否掛載成功
按照上述操作步驟執行,肯定能操作成功。如果你有更好的解決方案,也歡迎大家留言分享。
參考文獻
xfs_repair命令詳解 https://bbs.qunyingkeji.com/2052/
<END>






