一 修復服務器⽂件系統
在Linux系統中,為了增加系統性能,通常系統會將⼀些數據寫先放在內存中,並不會直接將數據寫⼊硬 盤,這是因為內存速度要⽐硬盤快若⼲倍。但是有個問題,萬⼀公司服務器突然斷電或者其他未知原 因,再次啟動后,會造成⽂件系統錯誤:“emergency mode”
執⾏任何命令都會有以下(或相似)錯誤
Error getting authority: Error initializing authority: Could not connect: Nosuch file or directory (g-io-error-quark, 1)
查看運⾏⽇志,可以提示出損壞的⽂件系統
journalctl -xb
修復⽅式:
# 0、如果進⼊不了操作系統,可以進⼊單⽤戶模式下操作
# 1、⾸先嘗試mount和umount⽂件系統,以便重放⽇志,修復⽂件系統,如果不⾏,再進⾏如下操作。
# 2、執⾏xfs_repair -n,只檢查不修復:檢查⽂件系統是否損壞,如何損壞會列出將要執⾏的操作[root@localhost ~]# xfs_repair -n /dev/sdb2
如果是⽇志和數據不⼀致了,xfs 默認會在掛載的時候修復這種不⼀致,操作系統給出的建議是以讀寫的⽅式掛載並⾃動修復,可以嘗試以只讀不修復⽅式掛載⽂件系統。
[root@localhost ~]# mount -o ro,norecovery /dev/sdb2 /opt
# 3、如果上述掛載不成功,可以執⾏xfs_repair修復⽂件系統
[root@localhost ~]# xfs_repair /dev/sdb2
# 4、如果還不⾏,那最后⽅法只能采⽤"損失部分數據的修復⽅法"根據打印消息,修復失敗時:
先執⾏xfs_repair -L /dev/sdb2(清空⽇志,會丟失⽂件)
再執⾏xfs_repair /dev/sdb2
說明:-L是修復xfs⽂件系統的最后⼿段,慎重選擇,它會清空⽇志,會丟失⽤戶數據和⽂件。
備注:在執⾏xfs_repair操作前,最好使⽤xfs_metadump⼯具保存元數據,⼀旦修復失敗,最起碼可以恢復到修復之前的狀態。
# 5、修復完成以后,嘗試能不能正常掛載 ,如能,取消掛載,再啟動就正常了
模擬⽂件系統損壞之 dd 命令
dd if=/dev/zero of=/dev/sdb bs=500M count=1
解釋:
if : 從哪里讀文件
of : 寫入到哪里
bs : 寫入500M
count : 寫一塊
示例:模擬文件系統出問題,再修復
1、准備⼀個1G的⽂件系統與數據
[root@localhost ~]# mount /dev/sdb1 /opt/
[root@localhost ~]# echo big_egon > /opt/1.txt
2、模擬⽂件系統損壞
[root@localhost ~]# dd if=/dev/zero of=/dev/sdb bs=500M count=1
# 直接⼲/dev/sdb⽽不是sdb1 (直接向硬盤中寫數據,不能測試向分區寫數據)
[root@localhost ~]# # 此時看似⼀切都正常
[root@localhost ~]# cat /opt/1.txt
big_egon
[root@localhost ~]# echo egon_nb > /opt/2.txt
[root@localhost ~]# cat /opt/2.txt
egon_nb
[root@localhost ~]# # 但是重新掛載就會失效,即斷電后系統重啟,重新掛載不成功
[root@localhost ~]# umount /opt
[root@localhost ~]# mount /dev/sdb1 /opt
mount: /dev/sdb1 寫保護,將以只讀⽅式掛載
mount: 未知的⽂件系統類型“(null)”
3、對文件系統進行修復
[root@localhost ~]# xfs_repair /dev/sdb1
xfs_repair [磁盤或分區路徑]
注: xfs_repair修改硬盤之后,硬盤數據丟失,所以對重要的數據要進行數據備份
二 xfs⽂件系統備份與恢復
備份:另外在保存一份
全量備份和增量備份
全量備份:將需要備份的文件全部復制一份
增量備份:在原來備份基礎上,把新增數據重新備份一份
命令:xfsdump
xfsdump的備份級別有以下兩種,默認為0(即完全備份)
0 完全備份
1 <= level <= 9 增量備份
# ps:增量備份是和第⼀次的備份(level 0)進⾏⽐較,僅備份有差異的⽂件(level 1)
xfsdump常⽤參數
-L :記錄每次備份的地方
-M :此次備份的注釋,這⾥可以填寫此媒體的簡易說明。
-l :指定備份的等級,有0~9共10個等級,默認為0,即完整備份
-f :備份的文件名稱,例如/dev/st0設備⽂件名或其他⼀般⽂件⽂件名
-I :查看備份信息,列出⽬前備份的信息狀態。
xfsdump使⽤限制
1.必須⽤root權限
2.只能備份已掛載的⽂件系統
3.只能備份XFS⽂件系統
4.只能⽤xfsrestore解釋
5.透過⽂件系統的UUID來分辨備份檔,因此不能備份相同UUID的⽂件系統
安裝備份命令
[root@localhost ~]# yum install xfsdump -y
備份的命令格式
xfsdump [參數] 備份路徑
例:xfsdump -L sdb1_bak -M "sbd1_from_xxx" -l 0 -f sdb1_from_bak_1 /root/oldboy
查看⼀下備份⽂件⼤⼩
[root@localhost ~]# du -sh /root/
恢復:將以前保存的數據進行還原
命令:xfsrestore
參數:
-f 指定備份的文件路徑
恢復的格式
xfsrestore [參數] 恢復的路徑
[root@localhost oldboy]# xfsrestore -f /root/sdb1_from_bak_3 /root/oldboy/
三 LVM
什么是LVM
邏輯卷管理LVM是硬盤的⼀個文件系統管理⼯具。⽆論在Linux或者其他類似的系統,都是⾮常的好⽤。傳統分區 使⽤固定⼤⼩分區,重新調整⼤⼩⼗分麻煩。但是,LVM可以創建和管理“邏輯”卷,⽽不是直接使⽤物 理硬盤。可以讓管理員彈性的管理邏輯卷的擴⼤縮⼩,操作簡單,⽽不損壞已存儲的數據。可以隨意將 新的硬盤添加到LVM,以直接擴展已經存在的邏輯卷。LVM並不需要重啟就可以讓內核知道分區的存 在。

通過 LVM 技術,可以屏蔽掉磁盤分區的底層差異,在邏輯上給⽂件系統提供了⼀個卷的概念,然后在這 些卷上建⽴相應的⽂件系統
lvm優缺點
優點:
1、可以在系統運⾏的狀態下動態的擴展⽂件系統的⼤⼩。
2、⽂件系統可以跨多個磁盤,因此⽂件系統⼤⼩不會受物理磁盤的限制。
3、可以增加新的磁盤到LVM的存儲池中。
4、可以以鏡像的⽅式冗余重要的數據到多個物理磁盤。
5、可以⽅便的導出整個卷組到另外⼀台機器。
缺點:
1、因為加⼊了額外的操作,存取性能受到影響。
2、當卷組中的⼀個磁盤損壞時,整個卷組都會受到影響。
解釋:LVM如果有⼀個磁盤損壞,整個lvm都壞了,lvm只有動態擴展作⽤,
⽅案:底層⽤RAID + 上層LVM = 既有冗余⼜有動態擴展
1、lvm的基本使⽤
1、安裝lvm軟件包
[root@localhost ~]# yum install lvm2 -y
2、制作pv:可以對分區做、也可以對整塊盤做
[root@localhost ~]# pvcreate /dev/sdb3 # 對分區做
[root@localhost ~]# pvcreate /dev/sdc # 對整塊盤做
3、查看pv
[root@localhost ~]# pvs
[root@localhost ~]# pvscan
4、創建vg:將pv划⼊vg中
[root@localhost ~]# vgcreate [vg名稱] [pv路徑]
[root@localhost ~]# vgcreate vg1 /dev/sdb1 /dev/sdc # 包含/dev/sdb1與/dev/sdc兩個pv
5、查看vg
[root@localhost ~]# vgs
6、創建lvm邏輯卷(lv)
lvcreate [參數] 邏輯卷名稱
-L : 創建邏輯卷的大小
-n : 邏輯卷的名字
lvcreate [參數] 邏輯卷名稱
[root@localhost ~]# lvcreate -L 100M -n lv1_from_vg1 vg1
[root@localhost ~]# lvs # 查看
7、制作文件系統
[root@localhost ~]# mkfs.xfs /dev/vg1/xxx
8、掛載文件系統
[root@localhost ~]# # mount [lv的路徑] [掛載點的路徑]
[root@localhost ~]# mount /dev/vg1/lv1_from_vg2 /test1/
2、在線動態擴容
在線擴容的意思為:在不⽤卸載的情況下完成擴容
lvextend -L [+]MGT /dev/VG_NAME/VL_NAME
# 注意:-L 100M 與 -L +100M不是⼀個意思,或者代表在原有的基礎上擴容
步驟示例
1、增加一塊硬盤或者⼀個分區
[root@localhost ~]# fdisk /dev/sdb
2、創建pv
[root@localhost ~]# pvcreate /dev/sdd
3、直接擴容給VG
[root@localhost ~]# vgextend [vg的名稱] [pv]
[root@localhost ~]# vgextend vg1 /dev/sdd
4、擴容給LV
[root@localhost ~]# lvextend -L [+100G] [lv路徑]
[root@localhost ~]# lvextend -L +100G /dev/vg1/lv1_from_vg1
5、刷新[root@localhost ~]# xfs_growfs /dev/vg1/lv1_from_vg1 # 擴展邏輯卷后需要更新fs⽂件系統
3、在線動態縮容與刪除
不要縮容!!!並且xfs⼲脆不⽀持縮容
lvreduce -L [-]MGT /dev/VG_NAME/LV_NAME 縮減邏輯卷
刪除
1、刪除lv之前需要先卸載掛載點
[root@localhost ~]# umount /root/vg02
2、刪除lv
[root@localhost ~]# lvremove /dev/vg1/vg1_test01
Do you really want to remove active logical volume vg1/vg1_test01? [y/n]: y
Logical volume "vg1_test01" successfully removed
3、刪除vg
[root@localhost ~]# vgremove vg1
Volume group "vg1" successfully removed
4、刪除PV:只能刪掉那些不屬於任何vg的pv
[root@localhost ~]# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped.
[root@localhost ~]# pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb2 vg2 lvm2 a-- <40.00g <40.00g
/dev/sdd vg2 lvm2 a-- <100.00g <100.00g
3、快照
LVM 機制提供了對 LV 做快照的功能,也就是說可以給⽂件系統做⼀個備份
快照的本質就是⼀個特殊的lv,創建快照后,如果源數據卷中的⽂件被更新了,會將⽼數據賦給快照的空間,這就要求快照的空間也是夠⽤的
步驟
1、掛載硬盤
2、創建PV
3、創建VG
4、創建LV
5、格式化文件系統
6、掛載
7、造數據
[root@www ~]# echo 111 >> /vg/1.txt
8、拍攝快照
[root@www ~]# lvcreate -L +1G -s -n vg_from_vg100_bak /dev/vg100/vg_from_vg100
Logical volume "vg_from_vg100_bak" created.
lvcreate -L [快照大小] -s(創建快照) -n [快照的名字] [拍攝快照的目標]
lvcreate -L 1G -s -n lv1_from_vg1_snap /dev/vg1/lv1_from_vg1
9、查看快照
[root@www ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Conver
vg_from_vg100 vg100 owi-aos--- 1.00t
vg_from_vg100_bak vg100 swi-a-s--- 1.00g vg_from_vg100 0.01
10、恢復數據
[root@www ~]# mount -o nouuid /dev/vg100/vg_from_vg100_bak /vg_bak
# 備注:同一個UUID只能掛載一次,如果需要掛載多次,則需要使用(-o nouuid)
快照恢復相當於重新掛載,優點是占用空間小。
