Linux之啟動(dòng)流程,磁盤陣列,文件系統(tǒng)和邏輯卷。

啟動(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)菜單。

image.png

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

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

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

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

又回到最初的畫面。
image.png

不光是啟動(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é)

image.png

文件系統(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)。
image.png

但是簡(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)容:

  1. 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)

  1. 首先將幾塊磁盤或者分區(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 的磁盤;
  1. 然后再將創(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;
  1. 最終的卷組(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的理解如下圖:


捕獲.PNG

實(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容