啟動(dòng)流程。
啟動(dòng)流程(CentOS7)
1. 加載BIOS的硬件信息,獲取第一個(gè)啟動(dòng)設(shè)備
2. 讀取第一個(gè)啟動(dòng)設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動(dòng)信息
3. 加載核心操作系統(tǒng)的核心信息,核心開始解壓縮,并嘗試驅(qū)動(dòng)所有的硬件設(shè)備
4. 核心執(zhí)行systemd程序,并獲取默認(rèn)的運(yùn)行信息
5. systemd程序執(zhí)行/etc/rc.d/rc.sysinit文件,重新掛載根文件系統(tǒng)
6. 啟動(dòng)核心的外掛模塊
7. systemd執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts)
8. systemd執(zhí)行/etc/rc.d/rc.local
9. 執(zhí)行/bin/login程序,等待用戶登錄
10. 登錄之后開始以Shell控制主機(jī)
MBR
MBR是一種分區(qū)表格式,位于磁盤的第一個(gè)扇區(qū),大小是521字節(jié)。存放著兩個(gè)重要的東西
-主引導(dǎo)記錄:可以安裝啟動(dòng)引導(dǎo)的地方,有446個(gè)字節(jié)。
-分區(qū)表:記錄整塊磁盤分區(qū)的狀態(tài),有64字節(jié)。
-結(jié)束符:55 AA 固定的兩個(gè)字節(jié)。若不是,則不進(jìn)行引導(dǎo)。
由于分區(qū)表只有64個(gè)字節(jié),因此MBR格式的分區(qū)最多能有四組記錄區(qū),每組記錄了該區(qū)段的起始和結(jié)束柱面號(hào)碼。
但是有時(shí)候卻又不止能分成四個(gè)分區(qū),那是因?yàn)樵谒慕M分區(qū)中被分為主要分區(qū)(Primary)和擴(kuò)展分區(qū)(Extended)
擴(kuò)展分區(qū)可以重新再被分區(qū),被分出來的區(qū)塊叫做邏輯分區(qū)(logical partition)
GRUB
GRUB是存在MBR前面的446字節(jié)當(dāng)中的一個(gè)啟動(dòng)引導(dǎo)程序,啟動(dòng)引導(dǎo)程序可以指定使用哪個(gè)內(nèi)核文件來啟動(dòng),并實(shí)際加載內(nèi)核到內(nèi)存中解壓縮與執(zhí)行。
GRUB分類還有GRUB和GRUB2,目前CentOS7使用的是GRUB2版本,當(dāng)然還存在其他類型的引導(dǎo)程序。目前來說GRUB2的引導(dǎo)分為三個(gè)階段
1.1st stage:MBR的前446個(gè)字節(jié)
1.5 stage: mbr 之后的扇區(qū),讓stage1中的bootloader能識(shí)別stage2所在的分區(qū)上的文件系統(tǒng)
2.secondary boot loader :2nd stage,分區(qū)文件/boot/grub/
現(xiàn)在來把第一階段破壞看看會(huì)是怎么樣子的。
1.先查看MBR分區(qū)的512字節(jié)是什么樣。
[root@centos7 ~]# hexdump -C -n 512 /dev/sda
00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............|
00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|
00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|
00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..|
00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........|
00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................|
00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p|
00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|
00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 05 7c |. ..d|<.t...R..||
00000090 b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 |.A..U..ZRr=..U.u|
000000a0 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 |7...t21..D.@.D..|
000000b0 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66 |D.....f..\|f.\.f|
000000c0 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd |..`|f.\..D..p.B.|
000000d0 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84 |.r...p.v....s.Z.|
000000e0 d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88 |.......}...f....|
000000f0 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88 |d.@f.D..........|
00000100 f4 40 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1 |.@.D.......f..f.|
00000110 60 7c 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7 |`|f..uNf.\|f1.f.|
00000120 34 88 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1 |4..1.f.t.;D.}7..|
00000130 88 c5 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00 |..0........Z....|
00000140 70 8e c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e |p..1......r...`.|
00000150 b9 00 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f |.....1..........|
00000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00 |a.&Z|..}....}.4.|
00000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 |..}.......GRUB .|
00000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 |Geom.Hard Disk.R|
00000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 |ead. Error......|
000001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 |.....<.u........|
000001b0 00 00 00 00 00 00 00 00 70 70 0e 00 00 00 80 20 |........pp..... |
000001c0 21 00 83 aa 28 82 00 08 00 00 00 00 20 00 00 aa |!...(....... ...|
000001d0 29 82 8e fe ff ff 00 08 20 00 00 20 c0 03 00 00 |)....... .. ....|
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
2.再將磁盤MBR分區(qū)的前446字節(jié)取出來。
[root@centos7 ~]# dd if=/dev/sda of=f1.img bs=1 count=446
3.然后將MBR的前446個(gè)字節(jié)換為全0。
[root@centos7 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446
這是未歸零之前的啟動(dòng)菜單。

這是歸零后的啟動(dòng)菜單。

可以看到,啟動(dòng)時(shí)可以選擇加載內(nèi)核的選項(xiàng)不在了。這也就正是說明了GRUB引導(dǎo)程序無法正常啟動(dòng),導(dǎo)致找不到內(nèi)核文件了,現(xiàn)在我們將它還原。
選擇上圖中的Troubleshooting模式,然后進(jìn)入救援模式。

再根據(jù)提示進(jìn)入到shell交互界面

執(zhí)行下面的命令。之后重啟便恢復(fù)啦

又回到最初的畫面。

不光是啟動(dòng)引導(dǎo)程序可能會(huì)出現(xiàn)錯(cuò)誤,在服務(wù)器中,數(shù)據(jù)的重要性更加應(yīng)該得到重視。下面來說說數(shù)據(jù)的安全性怎么保護(hù)。
在服務(wù)器中,數(shù)據(jù)的安全通常通過備份的方式來進(jìn)行保證其有一定的冗余性,我們知道,數(shù)據(jù)都是存放在磁盤當(dāng)中的,若是磁盤突然壞掉了,那數(shù)據(jù)便不可以使用了。當(dāng)然,也存在著恢復(fù)的可能性,但那要花費(fèi)更多的時(shí)間和金錢去做修復(fù)。但是RIAD技術(shù)可以幫助你緩解這種情況。
RAID
RAID(Redundant Arrays of Inexpensive Disks)中文名字叫做獨(dú)立冗余磁盤陣列。
RAID可以通過軟件或者硬件來將多個(gè)較小的磁盤組成一個(gè)較大的磁盤,這個(gè)被組成的磁盤不僅能夠存放數(shù)據(jù),還對(duì)數(shù)據(jù)的安全性有保護(hù)作用。常見的RAID模式有0,1,01,10,5
RAID 0 (等量模式)
RAID 0 (等量模式):性能最佳
這種模式下,最小需要兩塊硬盤,當(dāng)擁有兩塊大小的磁盤來組成時(shí),在該模式下RAID會(huì)將磁盤先切出等量的數(shù)據(jù)塊(chunk,一般可設(shè)置為4KB-1MB),然后當(dāng)一個(gè)文件要寫入RAID時(shí)改文件根據(jù)chunk的大小切割好,之后再依序放到各個(gè)磁盤中,由于數(shù)據(jù)會(huì)交替的存放在磁盤中,所以,你的數(shù)據(jù)會(huì)被等量的放在各個(gè)磁盤上。
優(yōu)點(diǎn)
- 由于數(shù)據(jù)是先切割好,然后再放入到磁盤中,每個(gè)磁盤負(fù)責(zé)的數(shù)據(jù)量變小。磁盤的性能有所提升。
- 磁盤的容量會(huì)增大,RAID 0 模式下的磁盤容量等于組成該模式磁盤的容量相加。
缺點(diǎn) - 由于每個(gè)文件都是被切割等分放在磁盤當(dāng)中的,一旦其中一塊磁盤損壞,那所有的數(shù)據(jù)都不能使用了。
RAID 1(鏡像模式)
RAID 1(鏡像模式):完全備份
組成該模式的磁盤最好也是一模一樣的磁盤。如果不是一樣的,那組成后的容量是以最小的那塊來決定的。
在RAID 1模式下會(huì)使同一份數(shù)據(jù)完整的保存在兩塊磁盤上面。RAID1 在寫入數(shù)據(jù)的時(shí)候,同一份數(shù)據(jù)會(huì)被分別寫入到不同的磁盤當(dāng)中,這便會(huì)使磁盤的寫入功能受到影響,寫入能力會(huì)變差,但是使用硬件磁盤陣列卡的時(shí)候不會(huì)出現(xiàn)這樣的情況,因?yàn)樗鼤?huì)自動(dòng)復(fù)制一份。但是讀取數(shù)據(jù)的能力則還可以。因?yàn)閿?shù)據(jù)存放在兩塊磁盤上,如果多個(gè)進(jìn)程在讀取同一條數(shù)據(jù),RAID會(huì)自動(dòng)平衡讀寫性能。
優(yōu)點(diǎn):
- 由于兩塊磁盤中的數(shù)據(jù)一致,即使壞到一塊磁盤也不必?fù)?dān)心。
缺點(diǎn): - 由于兩塊磁盤放置的數(shù)據(jù)一樣,磁盤的容量便只有全部磁盤容量的一半。
RAID 10 | 01
RAID 10 | 01就是RAID1+0,RAID 0+1
由于RAID0的數(shù)據(jù)安全不好,RAID1的寫入性能不好,然后就可以通過組合的方式來將優(yōu)點(diǎn)合并。
RAID1+0 就是先將兩塊磁盤組成RAID1,然后RADI1作為第一組,再取兩塊磁盤再做成RAID1,然后將其命名為第二組,最后將第一組和第二組再使用RADI的的方式組合起來。這便成了RAID1+0。如此一來,不管是那一組的RAID損壞,都不會(huì)有任何問題發(fā)生。反過來就是RAID01了。
優(yōu)點(diǎn)
- 讀寫性能提升很高。
缺點(diǎn) - 費(fèi)錢
RAID5 均衡考慮
RAID5至少需要3塊以上的磁盤才能后組成,每個(gè)循環(huán)寫入時(shí),都會(huì)有部分的奇偶校驗(yàn)值被記錄下來,并且每次都會(huì)記錄在不同的磁盤當(dāng)中。這個(gè)值會(huì)記錄其他磁盤的備份數(shù)據(jù),用于當(dāng)磁盤損失時(shí)的恢復(fù)。
優(yōu)點(diǎn)
1.RAID5的讀寫性能會(huì)有所增加
2.由于存在奇偶校驗(yàn)值,任何一塊磁盤損壞后都可以恢復(fù)。
缺點(diǎn)
1.磁盤的容量會(huì)是整體磁盤減少一塊后的容量。
熱備份磁盤
為了讓系統(tǒng)可以實(shí)時(shí)的在壞掉硬盤時(shí)主動(dòng)的重建,因此就需要預(yù)備磁盤 (spare disk) 的輔 助。 所謂的 spare disk 就是一顆或多顆沒有包含在原本磁盤陣列等級(jí)中的磁盤,這顆磁盤平 時(shí)并不會(huì)被磁盤陣列所使用, 當(dāng)磁盤陣列有任何磁盤損毀時(shí),則這顆 spare disk 會(huì)被主動(dòng)的 拉進(jìn)磁盤陣列中,并將壞掉的那顆硬盤移出磁盤陣列! 然后立即重建數(shù)據(jù)系統(tǒng)。若你的磁盤陣列有支持熱拔插, 直接將壞掉的那顆磁盤 拔除換一顆新的,再將那顆新的設(shè)置成為 spare disk ,就完成了!
總結(jié)

文件系統(tǒng)
文件系統(tǒng)是建立在磁盤上的,在linux中,文件含有權(quán)限(rwx)和屬性(屬主,屬組,時(shí)間等)。文件系統(tǒng)化將這兩部分的數(shù)據(jù)分別存放在不同的區(qū)塊,權(quán)限和屬性放在Inode中,實(shí)際的數(shù)據(jù)則放置在數(shù)據(jù)區(qū)塊中。另外還有一個(gè)超級(jí)區(qū)塊記錄著整個(gè)文件系統(tǒng)的整體信息。
每個(gè) inode 與 block 都有編號(hào),至于這三個(gè)數(shù)據(jù)的意義可以簡(jiǎn)略說明如下
- superblock:記錄此 filesystem 的整體信息,包括inode/block的總量、使用量、剩余量, 以及文件系統(tǒng)的格式與相關(guān)信息等;
- inode:記錄文件的屬性,一個(gè)文件占用一個(gè)inode,同時(shí)記錄此文件的數(shù)據(jù)所在的 block 號(hào)碼;
- block:實(shí)際記錄文件的內(nèi)容,若文件太大時(shí),會(huì)占用多個(gè) block;
由于每個(gè)inode與block都有編號(hào),而每個(gè)文件都會(huì)占用一個(gè)inode,inode中放置著block的號(hào)碼。那么我們現(xiàn)在只需要找到文件的inode號(hào)就可以知道數(shù)據(jù)存放的block位置,就可以實(shí)際讀出文件的實(shí)際信息了。
如圖,現(xiàn)在文件系統(tǒng)先格式化出inode和block的區(qū)塊,假設(shè)某個(gè)文件的屬性和權(quán)限放置在inode4號(hào)中(較小的格子),而4號(hào)中記錄了文件數(shù)據(jù)的實(shí)際放置位置2,7,13,15這四個(gè)block塊中,此時(shí)操作系統(tǒng)就可以按照此這樣的排列來讀取文件,一口氣將4個(gè)block全部讀出來。
這種數(shù)據(jù)存取的方法我們稱之為索引式文件系統(tǒng)。

但是簡(jiǎn)單像上面一樣劃分inode和block的話,當(dāng)數(shù)據(jù)量很大的時(shí)候,所有的inode和block堆積在一起,不容易管理。所以linux的文件系統(tǒng)會(huì)在此基礎(chǔ)上劃分為多個(gè)區(qū)塊群組,每個(gè)區(qū)塊群組都有獨(dú)立的inode/block/super block,就像是一個(gè)軍營里面一個(gè)營分為幾個(gè)連一樣。
在區(qū)塊群組的里面含有6個(gè)主要內(nèi)容:
-
data block(數(shù)據(jù)區(qū)塊)
這個(gè)區(qū)塊是用來放置文件內(nèi)容數(shù)據(jù)的地方,在ext2文件系統(tǒng)中所支持的block大小有1K,2K,4K三種。在格式化時(shí)block的大小就固定了,而且每個(gè)block都有編號(hào),以方便inode的記錄。由于block大小的差異,會(huì)導(dǎo)致文件系統(tǒng)能夠支持的最大磁盤容量和單一文件大小并不相同。ext2文件系統(tǒng)的限制如下:
image.png
除此之外 Ext2 文件系統(tǒng)的 block 還有什么限制呢?有的!基本限制如下:
- 原則上,block 的大小與數(shù)量在格式化完就不能夠再改變了(除非重新格式化);
- 每個(gè) block 內(nèi)最多只能夠放置一個(gè)文件的數(shù)據(jù);
- 承上,如果文件大于 block 的大小,則一個(gè)文件會(huì)占用多個(gè) block 數(shù)量;
- 承上,若文件小于 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會(huì)浪 費(fèi))
2.inode table (inode表格)
如前所述 inode 的內(nèi)容在記錄文件的屬性以及該文件實(shí) 際數(shù)據(jù)是放置在哪幾號(hào) block 內(nèi)! 基本上,inode 記錄的文件數(shù)據(jù)至少有下面這些:
- 該文件的存取模式(read/write/excute);
- 該文件的擁有者與群組(owner/group);
- 該文件的容量;
- 該文件創(chuàng)建或狀態(tài)改變的時(shí)間(ctime);
- 最近一次的讀取時(shí)間(atime);
- 最近修改的時(shí)間(mtime);
- 定義文件特性的旗標(biāo)(flag),如 SetUID...;
- 該文件真正內(nèi)容的指向 (pointer);
inode 的數(shù)量與大小也是在格式化時(shí)就已經(jīng)固定了,除此之外 inode 還有些什么特色呢?
- 每個(gè) inode 大小均固定為 128 Bytes (新的 ext4 與 xfs 可設(shè)置到 256 Bytes);
- 每個(gè)文件都僅會(huì)占用一個(gè) inode 而已;
- 承上,因此文件系統(tǒng)能夠創(chuàng)建的文件數(shù)量與 inode 的數(shù)量有關(guān);
- 系統(tǒng)讀取文件時(shí)需要先找到 inode,并分析 inode 所記錄的權(quán)限與使用者是否符合,若符 合才能夠開始實(shí)際讀取 block 的內(nèi)容。
3.Superblock (超級(jí)區(qū)塊)
Superblock 是記錄整個(gè) filesystem 相關(guān)信息的地方, 沒有 Superblock ,就沒有這個(gè) filesystem 了。他記錄的信息主要有:
- block 與 inode 的總量;
- 未使用與已使用的 inode / block 數(shù)量;
- block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128Bytes 或 256Bytes);
- filesystem 的掛載時(shí)間、最近一次寫入數(shù)據(jù)的時(shí)間、最近一次檢驗(yàn)磁盤 (fsck) 的時(shí)間 等文件系統(tǒng)的相關(guān)信息;
- 一個(gè) valid bit 數(shù)值,若此文件系統(tǒng)已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。
Superblock 是非常重要的,因?yàn)槲覀冞@個(gè)文件系統(tǒng)的基本信息都寫在這里,因此,如果 superblock 死掉了, 你的文件系統(tǒng)可能就需要花費(fèi)很多時(shí)間去挽救。一般來說, superblock 的大小為1024Bytes。相關(guān)的 superblock 信息我們會(huì)以 dumpe2fs 指令來 調(diào)用出來觀察喔!
此外,每個(gè) block group 都可能含有 superblock 喔!但是我們也說一個(gè)文件系統(tǒng)應(yīng)該僅有一 個(gè) superblock 而已,那是怎么回事??? 事實(shí)上除了第一個(gè) block group 內(nèi)會(huì)含有 superblock 之外,后續(xù)的 block group 不一定含有 superblock , 而若含有 superblock 則該 superblock 主要是做為第一個(gè) block group 內(nèi) superblock 的備份咯,這樣可以進(jìn)行 superblock 的救援 。
4.Filesystem Description (文件系統(tǒng)描述說明)
這個(gè)區(qū)段可以描述每個(gè) block group 的開始與結(jié)束的 block 號(hào)碼,以及說明每個(gè)區(qū)段 (superblock, bitmap, inodemap, data block) 分別介于哪一個(gè) block 號(hào)碼之間。這部份也能 夠用 dumpe2fs 來觀察的。
5.block bitmap (區(qū)塊對(duì)照表)
如果你想要新增文件時(shí)總會(huì)用到 block 吧!那你要使用哪個(gè) block 來記錄呢?當(dāng)然是選擇“空 的 block ”來記錄新文件的數(shù)據(jù)啰。 那你怎么知道哪個(gè) block 是空的?這就得要通過 block bitmap 的輔助了。從 block bitmap 當(dāng)中可以知道哪些 block 是空的,因此我們的系統(tǒng)就能夠 很快速的找到可使用的空間來處置文件啰。 同樣的,如果你刪除某些文件時(shí),那么那些文件原本占用的 block 號(hào)碼就得要釋放出來, 此 時(shí)在 block bitmap 當(dāng)中相對(duì)應(yīng)到該 block 號(hào)碼的標(biāo)志就得要修改成為“未使用中”啰!這就是 bitmap 的功能。
6.inode bitmap (inode 對(duì)照表)
這個(gè)其實(shí)與 block bitmap 是類似的功能,只是 block bitmap 記錄的是使用與未使用的 block 號(hào)碼, 至于 inode bitmap 則是記錄使用與未使用的 inode 號(hào)碼啰!
前面介紹了文件系統(tǒng)的相關(guān)概念,下面來看看文件系統(tǒng)的類型和相關(guān)的使用命令。
文件系統(tǒng)的類型
Linux 常用文件系統(tǒng)
- ext2:Extended file system 適用于那些分區(qū)容量不是太大,更新也不頻繁的情況,例如 /boot 分 區(qū)
- ext3:是 ext2 的改進(jìn)版本,其支持日志功能,能夠幫助系統(tǒng)從非正常關(guān)機(jī)導(dǎo)致的異常中恢復(fù)
- ext4:是 ext 文件系統(tǒng)的最新版。提供了很多新的特性,包括納秒級(jí)時(shí)間戳、創(chuàng)建和使用巨型文件
(16TB)、最大1EB的文件系統(tǒng),以及速度的提升 - xfs:SGI,支持最大8EB的文件系統(tǒng)
- swap
- iso9660 光盤
- btrfs(Oracle)
- reiserfs
Windows 常用文件系統(tǒng)
- FAT32
- NTFS
- exFAT
網(wǎng)絡(luò)文件系統(tǒng):
- NFS
- CIFS
文件系統(tǒng)的相關(guān)命令和工具
創(chuàng)建文件管理工具
mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
TYPE:
ext4
xfs
btrfs
vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL' 設(shè)定卷標(biāo)
mke2fs:ext系列文件系統(tǒng)專用管理工具
常用選項(xiàng):
-t {ext2|ext3|ext4|xfs} 指定文件系統(tǒng)類型
-b {1024|2048|4096} 指定塊 block 大小
-L ‘LABEL’ 設(shè)置卷標(biāo)
-j 相當(dāng)于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i 為數(shù)據(jù)空間中每多少個(gè)字節(jié)創(chuàng)建一個(gè)inode;不應(yīng)該小于block大小
-N 指定分區(qū)中創(chuàng)建多少個(gè)inode
-I 一個(gè)inode記錄占用的磁盤空間大小,128---4096
-m 默認(rèn)5%,為管理人員預(yù)留空間占總空間的百分比
-O FEATURE[,...] 啟用指定特性
-O ^FEATURE 關(guān)閉指定特性
文件系統(tǒng)的修復(fù)
文件系統(tǒng)夾故障常發(fā)生于死機(jī)或者非正常關(guān)機(jī)之后,掛載為文件系統(tǒng)標(biāo)記為“no clean”
注意:一定不要在掛載狀態(tài)下執(zhí)行下面命令修復(fù)
fsck: File System Check
注意:FS_TYPE 一定要與分區(qū)上已經(jīng)文件類型相同
fsck.FS_TYPE
fsck -t FS_TYPE
常用選項(xiàng):
-a 自動(dòng)修復(fù)
-r 交互式修復(fù)錯(cuò)誤
e2fsck:ext系列文件專用的檢測(cè)修復(fù)工具
常用選項(xiàng):
-y 自動(dòng)回答為yes
-f 強(qiáng)制修復(fù)
-p 自動(dòng)進(jìn)行安全的修復(fù)文件系統(tǒng)問題
xfs_repair:xfs文件系統(tǒng)專用檢測(cè)修復(fù)工具
-f 修復(fù)文件,而設(shè)備
-n 只檢查
-d 允許修復(fù)只讀的掛載設(shè)備,在單用戶下修復(fù) / 時(shí)使用,然后立即reboot
掛載與卸載
一個(gè)文件系統(tǒng)想要使用,則必須要先格式化稱為所需類型的文件系統(tǒng)之后,再進(jìn)行掛載操作才可以正常存放東西。
掛載的目的就是在原本封閉的文件系統(tǒng)上面創(chuàng)建出一個(gè)入口,或者說是一扇門,這樣就可以進(jìn)入文件系統(tǒng)。
卸載就是關(guān)閉上這扇門
掛載的相關(guān)命令
格式:mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint
device:指明要掛載的設(shè)備
設(shè)備文件:例如:/dev/sda5
卷標(biāo):-L 'LABEL', 例如 -L 'MYDATA'
UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
偽文件系統(tǒng)名稱:proc, sysfs, devtmpfs, configfs
注意:掛載點(diǎn)目錄必須事先存在,建議使用空目錄
常用選項(xiàng):
-t vsftype 指定要掛載的設(shè)備上的文件系統(tǒng)類型
-r readonly,只讀掛載
-w read and write, 讀寫掛載
-n 不更新/etc/mtab,mount不可見
-a 自動(dòng)掛載所有支持自動(dòng)掛載的設(shè)備(定義在了/etc/fstab文件中,且掛載選項(xiàng)中有
auto功能)
-L 'LABEL' 以卷標(biāo)指定掛載設(shè)備
-U 'UUID' 以UUID指定要掛載的設(shè)備
-B, --bind 綁定目錄到另一個(gè)目錄上
-o options:(掛載文件系統(tǒng)的選項(xiàng)),多個(gè)選項(xiàng)使用逗號(hào)分隔
async 異步模式,內(nèi)存更改時(shí),寫入緩存區(qū)buffer,過一段時(shí)間再寫到磁盤中,效率高,但不安全
sync 同步模式,內(nèi)存更改時(shí),同時(shí)寫磁盤,安全,但效率低下
atime/noatime 包含目錄和文件
diratime/nodiratime 目錄的訪問時(shí)間戳
auto/noauto 是否支持開機(jī)自動(dòng)掛載,是否支持-a選項(xiàng)
exec/noexec 是否支持將文件系統(tǒng)上運(yùn)行應(yīng)用程序
dev/nodev 是否支持在此文件系統(tǒng)上使用設(shè)備文件
suid/nosuid 是否支持suid和sgid權(quán)限
remount 重新掛載
ro/rw 只讀、讀寫
user/nouser 是否允許普通用戶掛載此設(shè)備,/etc/fstab使用
acl/noacl 啟用此文件系統(tǒng)上的acl功能
loop 使用loop設(shè)備
_netdev 當(dāng)網(wǎng)絡(luò)可用時(shí)才對(duì)網(wǎng)絡(luò)資源進(jìn)行掛載,如:NFS文件系統(tǒng)
defaults 相當(dāng)于rw, suid, dev, exec, auto, nouser, async
掛載規(guī)則:
一個(gè)掛載點(diǎn)同一時(shí)間只能掛載一個(gè)設(shè)備
一個(gè)掛載點(diǎn)同一時(shí)間掛載了多個(gè)設(shè)備,只能看到最后一個(gè)設(shè)備的數(shù)據(jù),其它設(shè)備上的數(shù)據(jù)將被隱藏
一個(gè)設(shè)備可以同時(shí)掛載到多個(gè)掛載點(diǎn)
通常掛載點(diǎn)一般是已存在空的目錄
卸載命令:
umount 設(shè)備名|掛載點(diǎn)
持久掛載
僅僅是在命令行界面鍵入掛載命令的話,那么下次開機(jī)便不會(huì)再自動(dòng)掛載相關(guān)的文件系統(tǒng)了。想要將文件系統(tǒng)持久的掛載,保證下次開機(jī)啟動(dòng)也能順利使用,那么久要將掛載規(guī)則寫入到配置文件----/etc/fstab
每行定義一個(gè)要掛載的文件系統(tǒng),,其中包括共 6 項(xiàng)
要掛載的設(shè)備或偽文件系統(tǒng)
設(shè)備文件
LABEL:LABEL=""
UUID:UUID=""
偽文件系統(tǒng)名稱:proc, sysfs
掛載點(diǎn):必須是事先存在的目錄
文件系統(tǒng)類型:ext4,xfs,iso9660,nfs,none
掛載選項(xiàng):defaults ,acl,bind
轉(zhuǎn)儲(chǔ)頻率:0:不做備份 1:每天轉(zhuǎn)儲(chǔ) 2:每隔一天轉(zhuǎn)儲(chǔ)
fsck檢查的文件系統(tǒng)的順序:允許的數(shù)字是0 1 2
0:不自檢 ,1:首先自檢;一般只有rootfs才用 2:非rootfs使用
查看一下系統(tǒng)的掛載配置更加明確
[root@centos7 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 22 18:06:45 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=13d89062-b95e-4f08-aef6-7ed1c3be0a8c /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
UUID=7a5dd9a3-96c4-43f7-aa51-b2b0b5827805 /data/mysql ext4 defaults 0 0
現(xiàn)在創(chuàng)建一個(gè)2G的文件系統(tǒng),塊大小為2048byte,預(yù)留1%可用空間,文件系統(tǒng) ext4,卷標(biāo)為TEST,要求此分區(qū)開機(jī)后自動(dòng)掛載至/test目錄,且默認(rèn)有acl掛載選項(xiàng)
[root@centos7 ~]# mke2fs -t ext4 -L 'TEST' -m 1 -b 2048 /dev/sdb2
[root@centos7 ~]# dumpe2fs /dev/sdb2
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: TEST
Last mounted on: <not available>
Filesystem UUID: a084c5d4-ede1-4ca8-9a53-d941f5d7fe8a
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 131072
Block count: 1048576
Reserved block count: 10485
Free blocks: 994651
Free inodes: 131061
First block: 0
Block size: 2048
Fragment size: 2048
Group descriptor size: 64
Reserved GDT blocks: 512
Blocks per group: 16384
Fragments per group: 16384
Inodes per group: 2048
Inode blocks per group: 256
Flex block group size: 16
Filesystem created: Thu Jan 14 16:38:23 2021
Last mount time: n/a
Last write time: Thu Jan 14 16:38:24 2021
Mount count: 0
Maximum mount count: -1
Last checked: Thu Jan 14 16:38:23 2021
Check interval: 0 (<none>)
Lifetime writes: 65 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 6a2c3d78-920b-45c5-bb33-4bc9ba14202f
Journal backup: inode blocks
Journal features: (none)
Journal size: 64M
Journal length: 32768
Journal sequence: 0x00000001
Journal start: 0
[root@centos7 ~]# vim /etc/fstab
UUID="a084c5d4-ede1-4ca8-9a53-d941f5d7fe8a" /test ext4 defaults,acl 0 0
LVM(邏輯卷)
什么是邏輯卷?為什么需要邏輯卷?
當(dāng)我們?cè)诖鎯?chǔ)數(shù)據(jù)到指定的目錄或者分區(qū)下的時(shí)候,經(jīng)過長時(shí)間的存儲(chǔ),就會(huì)出現(xiàn)目錄或者分區(qū)的空間不夠用,此時(shí)大都是選擇在重新上一塊磁盤,然后分區(qū),格式化,然后將指定目錄下為數(shù)據(jù)復(fù)制過來,將原來的目錄卸載重新掛載新的文件系統(tǒng)。長此以往會(huì)顯得很麻煩,不夠靈動(dòng)。
此時(shí)邏輯卷就產(chǎn)生了,邏輯卷是可以彈性的調(diào)整文件系統(tǒng)的容量,可以整合多個(gè)實(shí)體合并在一起。這并不像RAID,邏輯卷負(fù)責(zé)彈性的變更容量。通過組合然后再將這塊組成的大的磁盤分區(qū),就可以進(jìn)行使用了。
邏輯卷的實(shí)現(xiàn)
- 首先將幾塊磁盤或者分區(qū)創(chuàng)建成物理卷(pv,文件系統(tǒng)的標(biāo)識(shí)為8e)
pv管理工具
顯示pv信息
pvs:簡(jiǎn)要pv信息顯示
pvdisplay
創(chuàng)建pv
pvcreate /dev/device
刪除pv
pvremove /dev/device
搜索pv
pvscan :搜尋目前系統(tǒng)里面任何具有 PV 的磁盤;
- 然后再將創(chuàng)建的物理卷組成一個(gè)卷組(vg)
卷組管理工具
顯示pv信息
vgs:簡(jiǎn)要pv信息顯示
vgdisplay
創(chuàng)建vg
vgcreate vg_name pv
選項(xiàng)與參數(shù)
-s :后面接 PE 的大小 (size) ,單位可以是 m, g, t (大小寫均可)
刪除vg
先做pvmove
在做vgremove
擴(kuò)展刪除
vgextend :在 VG 內(nèi)增加額外的 PV ;
vgreduce :在 VG 內(nèi)移除 PV;
- 最終的卷組(vg)會(huì)被切割成邏輯卷(lv),lv就類似分區(qū),lv的大小是根據(jù)PE總數(shù)來決定的。
lv管理工具
lvcreate :創(chuàng)建 LV 啦!
選項(xiàng)與參數(shù):
-L :后面接容量,容量的單位可以是 M,G,T 等,要注意的是,最小單位為 PE, 因此這個(gè)數(shù)量必須要是 PE 的倍數(shù),若不相符 ,
系統(tǒng)會(huì)自行計(jì)算最相近的容量。
-l :后面可以接 PE 的“個(gè)數(shù)”,而不是數(shù)量。若要這么做,得要自行計(jì)算 PE 數(shù)。
-n :后面接的就是 LV 的名稱啦!
lvscan :查詢系統(tǒng)上面的 LV ;
lvdisplay :顯示系統(tǒng)上面的 LV 狀態(tài)??!
lvextend :在 LV 里面增加容量!
lvreduce :在 LV 里面減少容量;
lvremove :刪除一個(gè) LV !
lvresize :對(duì) LV 進(jìn)行容量大小的調(diào)整!
注意:在邏輯卷中,PE是最小的儲(chǔ)存單位,文件的數(shù)據(jù)寫入都是靠寫入PE來處理的,默認(rèn)的PE大小是4MB。
PE的理解如下圖:
實(shí)例:創(chuàng)建一個(gè)至少有兩個(gè)PV組成的大小為20G的名為testvg的VG;要求PE大小 為16MB, 而后在卷組中創(chuàng)建大小為5G的邏輯卷testlv;掛載至/users目錄
以sdb為例
掃描添加的磁盤
[root@centos7 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@centos7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 30G 0 part
├─centos-root 253:0 0 15G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 5G 0 lvm /home
sdb 8:16 0 60G 0 disk
分區(qū)并改標(biāo)識(shí)
[root@centos7 ~]# fdisk /dev/sdb
Device Boot Start End Blocks Id System
/dev/sdb1 2048 41945087 20971520 8e Linux LVM
/dev/sdb2 41945088 83888127 20971520 8e Linux LVM
[root@centos7 ~]# lsblk
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 20G 0 part
└─sdb2 8:18 0 20G 0 part
1.創(chuàng)建物理卷
[root@centos7 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@centos7 ~]# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
2.創(chuàng)建卷組
[root@centos7 ~]# vgcreate -s 16M testvg /dev/sdb1 /dev/sdb2
Volume group "testvg" successfully created
[root@centos7 ~]# vgdisplay
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size <39.97 GiB
PE Size 16.00 MiB
Total PE 2558
Alloc PE / Size 0 / 0
Free PE / Size 2558 / <39.97 GiB
VG UUID qod5np-BLQC-fQIG-aBzc-KCtH-Fmm2-A0BVO
3.創(chuàng)建邏輯卷
[root@centos7 ~]# lvcreate -L 5G -n testlv testvg
[root@centos7 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/testvg/testlv
LV Name testlv
VG Name testvg
LV UUID 8LeWpm-FIOD-aC4f-Jz9n-mFQG-guQ9-pfxoN4
LV Write Access read/write
LV Creation host, time centos7, 2021-01-16 14:15:09 +0800
LV Status available
# open 0
LV Size 5.00 GiB
Current LE 320
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
4 掛載
[root@centos7 ~]# mkdir /users
[root@centos7 ~]# mount /dev/mapper/testvg-testlv /users
mount: /dev/mapper/testvg-testlv is write-protected, mounting read-only
mount: unknown filesystem type '(null)'
發(fā)現(xiàn)lv還沒有進(jìn)行格式化,沒有文件系統(tǒng),沒法使用。
[root@centos7 ~]# mkfs.ext4 /dev/mapper/testvg-testlv
[root@centos7 ~]# mount /dev/mapper/testvg-testlv /users
/dev/mapper/testvg-testlv 4.8G 20M 4.6G 1% /users
至此,lv就可以使用了。
關(guān)于擴(kuò)展和縮減
在進(jìn)行擴(kuò)展之前,先要確保vg卷組中有足夠的的PE可以使用。
[root@centos7 ~]# vgdisplay
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size <39.97 GiB
PE Size 16.00 MiB
Total PE 2558
Alloc PE / Size 320 / 5.00 GiB
Free PE / Size 2238 / <34.97 GiB ------>還有很多的空余的PE未使用,可以對(duì)lv進(jìn)行擴(kuò)展。
VG UUID qod5np-BLQC-fQIG-aBzc-KCtH-Fmm2-A0BVO5
[root@centos7 ~]# lvresize -L +2G /dev/mapper/testvg-testlv
[root@centos7 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/testvg/testlv
LV Name testlv
VG Name testvg
LV UUID 8LeWpm-FIOD-aC4f-Jz9n-mFQG-guQ9-pfxoN4
LV Write Access read/write
LV Creation host, time centos7, 2021-01-16 14:15:09 +0800
LV Status available
# open 1
LV Size 7.00 GiB
Current LE 448
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
[root@centos7 ~]# df -h
/dev/mapper/testvg-testlv 4.8G 20M 4.6G 1% /users 注意到文件系統(tǒng)沒有變化,而lv確實(shí)變大了
#針對(duì)ext
resize2fs /dev/VG_NAME/LV_NAME
#針對(duì)xfs
xfs_growfs MOUNTPOINT
[root@centos7 ~]# resize2fs /dev/testvg/testlv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/testvg/testlv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/testvg/testlv is now 1835008 blocks long.
/dev/mapper/testvg-testlv 6.8G 23M 6.4G 1% /users ------>這就變成正常的了
縮減:XFS文件系統(tǒng)不支持縮減,對(duì)lv縮減有一定的風(fēng)險(xiǎn)性。
1.卸載文件系統(tǒng)
[root@centos7 ~]# umount /users/
[root@centos7 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 14M 473M 3% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 15G 1.4G 14G 10% /
/dev/sda1 1014M 137M 878M 14% /boot
/dev/mapper/centos-home 5.0G 33M 5.0G 1% /home
tmpfs 98M 0 98M 0% /run/user/0
2.檢查文件系統(tǒng)的完整性
[root@centos7 ~]# e2fsck /dev/mapper/testvg-testlv
e2fsck 1.42.9 (28-Dec-2013)
/dev/mapper/testvg-testlv: clean, 11/458752 files, 67327/1835008 blocks
3.縮小文件系統(tǒng)
[root@centos7 ~]# resize2fs -f /dev/mapper/testvg-testlv 2G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/testvg-testlv to 524288 (4k) blocks.
The filesystem on /dev/mapper/testvg-testlv is now 524288 blocks long.
4.縮小lv大小
[root@centos7 ~]# lvreduce -L 2G /dev/mapper/testvg-testlv
WARNING: Reducing active logical volume to 2.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testvg/testlv? [y/n]: y
Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 2.00 GiB (128 extents).
Logical volume testvg/testlv successfully resized.
[root@centos7 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/testvg/testlv
LV Name testlv
VG Name testvg
LV UUID 8LeWpm-FIOD-aC4f-Jz9n-mFQG-guQ9-pfxoN4
LV Write Access read/write
LV Creation host, time centos7, 2021-01-16 14:15:09 +0800
LV Status available
# open 0
LV Size 2.00 GiB
Current LE 128
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
擴(kuò)展卷組
[root@centos7 ~]# pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created.
[root@centos7 ~]# vgextend testvg /dev/sdb3
Volume group "testvg" successfully extended
[root@centos7 ~]# vgdisplay
--- Volume group ---
VG Name testvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 41.95 GiB
PE Size 16.00 MiB
Total PE 2685
Alloc PE / Size 128 / 2.00 GiB
Free PE / Size 2557 / 39.95 GiB
VG UUID qod5np-BLQC-fQIG-aBzc-KCtH-Fmm2-A0BVO5
