1 磁盤的基本概念
1.什么是磁盤
絕大多數人對硬盤都不陌生,
一塊小小的硬盤里,就可以存儲海量的照片、音樂和電影等,尤其是你們喜愛的各類**動作片。
但如此小的空間,是如何存儲那么多信息的呢?
每個硬盤中心都是一摞高速運轉的圓盤,圓盤由一層帶磁的微型金屬顆粒組成,每個顆粒也被稱為一比特,都有自己的磁化程度,用於儲存0和1。
當記錄數據時,硬盤的磁頭開始通電,形成強磁場,數據在磁場的作用下轉變成電流,使顆粒磁化,從而將信息記錄在圓盤上。
由海量顆粒組成的信息,就是我們存在硬盤里的數據。
2.什么是磁盤、軟盤、硬盤?
軟盤在如今已經很少被使用了,使用軟盤需要安裝軟盤驅動。軟盤容量小,容易損壞。隨着數據的大量增長,軟盤已經不滿足日益所需的數據存儲需求,如是,硬盤便被研發出來。
3.什么是硬盤?
硬盤就是計算機中的最大的存儲裝置了,就是將磁盤的儲存片裝到硬質金屬盒子里可以得到更好的保護,而且在使用壽命上也比軟盤優越得多,只有低格才對硬盤有很大的傷害,其它的讀寫是不要緊的,也就叫硬盤。
4.磁盤與軟盤硬盤的關系?
磁盤是一種統稱,即是一開始的軟盤,又是現如今的硬盤,但是在現在,說起磁盤,都指的是硬盤。
2磁盤的基本結構
-
什么是盤片
盤片是硬盤中承載數據存儲的介質。硬盤盤片是以堅固耐用的材料為盤基,將磁粉附着在鋁合金(新材料也有用玻璃)圓盤片的表面上,表面被加工的相當平滑。這些磁粉被划分成稱為磁道的若干個同心圓,在每個同心圓的磁道上就好像有無數的任意排列的小磁鐵,它們分別代表着0和1的狀態。當這些小磁鐵受到來自磁頭的磁力影響時,其排列的方向會隨之改變。 利用磁頭的磁力控制指定的一些小磁鐵方向,使每個小磁鐵都可以用來儲存信息。硬盤是由多個盤片疊加在一起,互相之間由墊圈隔開。 硬盤中一般會有多個盤片,每個盤片包含兩個面,每個盤面都對應地有一個讀/寫磁頭(Head,簡寫為H)。受到硬盤整體體積和生產成本的限制,盤片數量都受到限制,一般都在5片以內。盤片的編號自下向上從0開始,如最下邊的盤片有0面和1面,再上一個盤片就編號為2面和3面。

-
什么是磁道?
當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁盤表面划出一個圓形軌跡,這些圓形軌跡就叫做磁道。
每個盤片的盤面在出廠的時候被划分出了多個同心圓環,數據就存儲在這樣的同心圓環上面,每個盤面可以划分多個磁道,但是肉眼不可見。通常一塊盤面有成千上萬個磁道。
磁盤上的磁道是一組記錄密度不同的同心圓。磁表面存儲器是在不同形狀(如盤狀、帶狀等)的載體上。

03. 什么是扇區?
在硬盤出廠時會對磁盤進行一次低級格式化,其實就是再將每個磁道划分為若干個弧段,每個弧段就是一個扇區(Sector)。若干個扇區就組成整個盤片,硬盤的讀寫以扇區為基本單位。這種以簇為最小分配單位的機制,使硬盤對數據的管理變得相對容易。現在每個扇區可存儲512字節數據,已經成了業界的約定。
低級格式化就是將空白的磁盤划分出柱面和磁道,再將磁道划分為若干個扇區,每個扇區又划分出標識部分ID、間隔區GAP和數據區DATA等。
硬盤低級格式化的功用:硬盤低級格式化是對硬盤最徹底的初始化方式,經過低格后的硬盤,原來保存的數據將會全部丟失,所以一般來說低格硬盤是非常不可取的,只有非常必要的時候才能低格硬盤。而這個所謂的必要時候有兩種,一是硬盤出廠前,硬盤廠會對硬盤進行一次低級格式化;另一個是當硬盤出現某種類型的壞道時,使用低級格式化能起到一定的緩解或者屏蔽作用。
-
什么是柱面
柱面實際上就是我們抽象出來的一個邏輯概念,簡單來說就是處於同一個垂直區域的磁道稱為柱面,即各盤面上面相同位置的集合,這樣數據如果存儲到相同半徑磁道上的同一扇區,這樣可以實現並行讀取,主要是減少磁頭尋道時間。
-
什么是磁頭?
磁頭是硬盤中最昂貴的部件,也是硬盤技術中最重要和最關鍵的一環。主要作用是讀取磁盤磁道上面的金屬塊,負責讀或寫入數據。
3.磁盤的預備知識
我們需要了解下磁盤的接口類型,磁盤涉及的相關術語,磁盤在Linux下的命令方式
01. 磁盤的接口類型
**IDE,SCSI (已經被淘汰)**

**SATA III 與 SAS (企業使用較多)**

**SSD(支持SATA、PCI-E)**
機械和固態的對比
機械(HDD) | 固態(SSD) |
---|---|
容量大價格低 | 容量小價格高 |
抗擊打能力弱 | 抗擊打能力高 |
讀寫速度稍慢 | 讀寫速度很快 |
數據恢復易 | 數據恢復難 |
使用時間無限 | 使用時間1-2w次 |
02. 磁盤的基本術語
尺寸:2.5英寸、3.5英寸
容量:B、KB、MB、GB、TB、PB、EB
轉速:7.5k、10k、15k
IOPS:每秒能夠發生IO的次數
03. 磁盤在系統上的命名方式
設備名稱 | 分區信息 | 設備類型 |
---|---|---|
/dev/sda | /dev/sda1 | 第一塊物理磁盤第一分區 |
/dev/sdb | /dev/sdb2 | 第二塊磁盤第二個分區 |
/dev/vdd | /dev/vdd4 | 第四塊虛擬磁盤的第四個分區 |
PS1:系統中分區由數字編號表示,1-4表示給主分區使用和擴展分區,邏輯分區從5開始,為什么分區還有限制?不應該是隨意分配?因為MBR分區表只能分配4個主分區?why?
PS2:前面我們已經提到過MBR分區表只能分配4個主分區,但現在還有一種新型的分區表GPT,GPT支持分配128個主分區。注意MBR與GPT之間不能互轉,會導致數據丟失。
MBR位置:0磁頭0磁道1扇區。

1如何查看磁盤的大小及文件內容的大小
[root@qiudao ~]# du -sh /etc/
34M /etc/
2查看磁盤使用情況
[root@qiudao ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 5.8G 32G 16% /
devtmpfs 909M 0 909M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 508K 919M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/0
3查看設備詳情,以及分區的情況
[root@qiudao ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
在linux中,當我們給系統添加一塊新硬盤時,我們是無法使用的,因為他還沒有分區和格式化,只有當我們將新硬盤分區並格式化之后,掛載在某個目錄下,才能供我們正常使用,接下來我們要學習兩種種硬盤分區工具,Fdisk,Gdisk;分別是針對於MBR分區格式,GPT分區格式進行分區。還有一種高級分區工具Parted(可以針對於多種分區表進行分區,使用起來也是比較復雜的,不建議使用)。
4.磁盤基本分區Fdisk
適用於磁盤小於2TB的磁盤,分區類型MBR,主分區4或主分區3+擴展分區(邏輯分區+…),分區后需要保存后才能生效
1.先准備磁盤
由於沒有真實的服務器,只能添加虛擬的磁盤,VMware中添加硬盤,添加一塊20G的硬盤。
2.分區fdisk--->分低於2TB的磁盤
[root@qiudao ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 7月 5 19:21 /dev/sda
brw-rw---- 1 root disk 8, 1 7月 5 19:21 /dev/sda1
brw-rw---- 1 root disk 8, 2 7月 5 19:21 /dev/sda2
brw-rw---- 1 root disk 8, 16 7月 5 19:21 /dev/sdb
brw-rw---- 1 root disk 8, 32 7月 5 19:21 /dev/sdc
[root@qiudao ~]# 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 39G 0 part
├─centos-root 253:0 0 37G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 4T 0 disk
[root@xuliangwei ~]# fdisk /dev/sdb
Command (m for help): m #輸入m列出常用的命令
Command action
a toggle a bootable flag #切換分區啟動標記
b edit bsd disklabel #編輯sdb磁盤標簽
c toggle the dos compatibility flag #切換dos兼容模式
d delete a partition #刪除分區
l list known partition types #顯示分區類型
m print this menu #顯示幫助菜單
n add a new partition #新建分區
o create a new empty DOS partition table #創建新的空白分區表
p print the partition table #顯示分區表的信息
q quit without saving changes #不保存退出
s create a new empty Sun disklabel #創建新的Sun磁盤標簽
t change a partitions system id #修改分區ID,可以通過l查看id
u change display/entry units #修改容量單位,磁柱或扇區
v verify the partition table #檢驗分區表
w write table to disk and exit #保存退出
x extra functionality (experts only) #拓展功能
\#分配第1個分區
[root@qiudao ~]# fdisk /dev/sdb
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #選擇分配主分區
Partition number (1-4, default 1): #主分區編號
First sector (2048-41943039, default 2048): #開始的扇區 回車即可
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G #設置分區的大小
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): p #查看當前磁盤的分區情況
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x44d0ef75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
3分配第2個分區
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (2099200-41943039, default 2099200):
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-41943039, default 41943039): +2G
Partition 2 of type Linux and of size 2 GiB is set
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x44d0ef75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 6293503 2097152 83 Linux
\#分配6個分區 (超出了4個主分區,最佳 3p+1e+3l 2p+1e+4l)
Device Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 6293503 2097152 83 Linux
/dev/sdb3 6293504 10487807 2097152 83 Linux
/dev/sdb4 10487808 41943039 15727616 5 Extended
/dev/sdb5 10489856 20975615 5242880 83 Linux
/dev/sdb6 20977664 31463423 5242880 83 Linux
/dev/sdb7 31465472 41943039 5238784 83 Linux
4檢查分區情況
[root@qiudao ~]# lsblk
sdb 8:16 0 20G 0 disk
|-sdb1 8:17 0 1G 0 part
|-sdb2 8:18 0 2G 0 part
|-sdb3 8:19 0 2G 0 part
|-sdb4 8:20 0 1K 0 part
|-sdb5 8:21 0 5G 0 part
|-sdb6 8:22 0 5G 0 part
`-sdb7 8:23 0 5G 0 part
5格式化->創建文件系統(裝修)**
[root@qiudao ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
04. 掛載
[root@qiudao /]# mount /dev/sdb1 /soft/ #將/soft作為/dev/sdb1分區的一個入口目錄
[root@qiudao /]# touch /soft/1111 #添加111文件,實際上是在/dev/sdb1分區上添加的數據
[root@qiudao /]# ls /soft/
1111
[root@qiudao /]# umount /soft/ #卸載/soft掛載信息
[root@qiudao /]# ls /soft/ #soft又回到了原來的目錄屬性
nginx nginx-1.16.0
---------注意: 原來寫入到/dev/sdb1分區的數據不會被刪除,當重新掛載一個新的目錄,文件還會回來.
[root@qiudao /]# mkdir /data
[root@qiudao /]# mount /dev/sdb1 /data/
[root@qiudao /]# ls /data/
1111
05. 實現永久掛載,寫入配置文件/etc/fstab 以實現開機時,自動掛載
[root@qiudao ~]# cat /etc/fstab
\#設備名稱 掛載的位置 文件系統類型 掛載的參數 是否備份 是否檢查
/dev/sdb1 /data xfs defaults 0 0
\#請先卸載掛載的信息,然后再mount -a
[root@qiudao ~]# mount -a
5. 磁盤的基本分區Gdisk
分區表為GPT,主分區*128,分區后需要保存后才能生效
1.准備環境
VMware中添加硬盤,添加一塊2T的硬盤。
\#安裝軟件包
[root@qiudao ~]# yum install gdisk -y
2.創建分區
[root@qiudao ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 47.8G 0 part /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 2G 0 part
sdc 8:32 0 2T 0 disk
sr0 11:0 1 4.3G 0 rom
[root@qiudao ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): m
b back up GPT data to a file #將GPT數據備份到文件中
c change a partition's name #更改分區的名稱
d delete a partition #刪除分區
i show detailed information on a partition #顯示分區的詳細信息
l list known partition types #列出已知的分區類型
n add a new partition #添加一個新的分區
o create a new empty GUID partition table (GPT) #創建一個新的空GUID分區表(GPT)
p print the partition table #打印分區表
q quit without saving changes #沒有保存更改就退出
r recovery and transformation options (experts only) #恢復和轉換選項(僅限專家使用)
s sort partitions #年代分類分區
t change a partition's type code #不要更改分區的類型代碼
v verify disk #驗證磁盤
w write table to disk and exit #將表寫入磁盤並退出
x extra functionality (experts only) #額外功能(僅限專家使用)
? print this menu #打印菜單
Command (? for help): n #創建新的分區
Partition number (1-128, default 1): #分區編號
First sector (34-4294967262, default = 2048) or {+-}size{KMGTP}: #扇區開始位置
Last sector (2048-4294967262, default = 4294967262) or {+-}size{KMGTP}: #設置分區大小
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L #查看文件系統,默認是Linux
0700 Microsoft basic data 0c01 Microsoft reserved 2700 Windows RE
3000 ONIE boot 3001 ONIE config 4100 PowerPC PReP boot
4200 Windows LDM data 4201 Windows LDM metadata 7501 IBM GPFS
7f00 ChromeOS kernel 7f01 ChromeOS root 7f02 ChromeOS reserved
8200 Linux swap 8300 Linux filesystem 8301 Linux reserved
8302 Linux /home 8400 Intel Rapid Start 8e00 Linux LVM
a500 FreeBSD disklabel a501 FreeBSD boot a502 FreeBSD swap
a503 FreeBSD UFS a504 FreeBSD ZFS a505 FreeBSD Vinum/RAID
a580 Midnight BSD data a581 Midnight BSD boot a582 Midnight BSD swap
a583 Midnight BSD UFS a584 Midnight BSD ZFS a585 Midnight BSD Vinum
a800 Apple UFS a901 NetBSD swap a902 NetBSD FFS
a903 NetBSD LFS a904 NetBSD concatenated a905 NetBSD encrypted
a906 NetBSD RAID ab00 Apple boot af00 Apple HFS/HFS+
af01 Apple RAID af02 Apple RAID offline af03 Apple label
af04 AppleTV recovery af05 Apple Core Storage be00 Solaris boot
bf00 Solaris root bf01 Solaris /usr & Mac Z bf02 Solaris swap
bf03 Solaris backup bf04 Solaris /var bf05 Solaris /home
bf06 Solaris alternate se bf07 Solaris Reserved 1 bf08 Solaris Reserved 2
bf09 Solaris Reserved 3 bf0a Solaris Reserved 4 bf0b Solaris Reserved 5
c001 HP-UX data c002 HP-UX service ea00 Freedesktop $BOOT
eb00 Haiku BFS ed00 Sony system partitio ed01 Lenovo system partit
Press the <Enter> key to see more codes: #翻頁
ef00 EFI System ef01 MBR partition scheme ef02 BIOS boot partition
fb00 VMWare VMFS fb01 VMWare reserved fc00 VMWare kcore crash p
fd00 Linux RAID
Hex code or GUID (L to show codes, Enter = 8300): #選擇默認
Changed type of partition to 'Linux filesystem'
Command (? for help): p #打印分區表信息
Disk /dev/sdc: 4294967296 sectors, 2.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2DD1054A-9F8C-427A-803B-4F4E6F7F38B4
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 4294967262
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4294967262 2.0 TiB 8300 Linux filesystem
Command (? for help): w #保存退出
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y #確定
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
[root@qiudao ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 47.8G 0 part /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 2G 0 part
sdc 8:32 0 2T 0 disk
└─sdc1 8:33 0 2T 0 part
sr0 11:0 1 4.3G 0 rom
3.格式化->創建文件系統(裝修)
[root@qiudao ~]# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=134217663 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=536870651, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=262143, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
4. 掛載
[root@qiudao ~]# mkdir /gbt
[root@qiudao ~]# mount /dev/sdc1 /gbt
[root@qiudao ~]# cd /gbt
[root@qiudao /gbt]# ll
total 0
[root@qiudao /gbt]# dd if=/dev/zero of=test.txt bs=10M count=100
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 1.62123 s, 647 MB/s
[root@qiudao /gbt]# ll
total 1024000
-rw-r--r-- 1 root root 1048576000 Jul 9 23:48 test.txt
[root@qiudao /gbt]# cd
[root@qiudao ~]#
[root@qiudao ~]# umount /gbt
[root@qiudao ~]# ll /gbt
total 0
5.實現永久掛載,寫入配置文件/etc/fstab 以實現開機時,自動掛載
[root@qiudao ~]# cat /etc/fstab
\#設備名稱 掛載的位置 文件系統類型 掛載的參數 是否備份 是否檢查
/dev/sdc1 /gbt xfs defaults 0 0
\#請先卸載掛載的信息,然后再mount -a
[root@qiudao ~]# mount -a
6. 磁盤掛載方式Mount
前面我們已經提到過,如果需要使用磁盤的空間,需要准備一個空的目錄作為掛載點,與該設備進行關聯。
mount主要是為文件系統指定一個訪問入口。
PS:類似我的商場沒有門,那么就無法進入購買商品,此時通過mount命令可以創建一個入口。給超市安裝一個門。
1.通過mount進行掛載,但重啟將會失效;我們稱為臨時生效。
#選項:
-t #指定文件系統掛載分區
-a #掛載/etc/fstab中的配置文件
-o #指定掛載參數
\#示例:掛載/dev/sdb1至db1目錄
[root@qiudao ~]# mkdir /db1
[root@qiudao ~]# mount -t xfs /dev/sdb1 /db1
2.掛載的磁盤,如果不想使用可以用umount命令進行卸載。
\#選項:
-l #強制卸載
\#示例:
\#1.卸載目錄方式
[root@qiudao ~]# umount /db1
\#2.卸載設備方式
[root@qiudao ~]# umount /dev/sdb1
\#3.umount不能卸載的情況
[root@qiudao db1]# umount /db1
umount: /db1: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1)
#PS: 如上情況解決辦法有兩種, 1.切換至其他目錄 2.使用'-l'選項強制卸載
3.如果需要實現永久掛載則需要將掛載信息寫入/etc/fstab配置文件中實現
\#建議掛載時使用UUID
\#1.怎樣獲取磁盤分區的UUID,使用blkid命令獲取
[root@qiudao ~]# blkid|grep sdc1
/dev/sdc1: UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b"
\#2.手動測試是否能正常的掛載
[root@qiudao ~]# mount UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b" /datac
\#3.將信息寫入到/etc/fstab文件中,保證下次啟動系統自動掛載
UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b" /datac xfs defaults 0 0
\#4.卸載/datac掛載信息, 然后使用mount -a檢查/etc/fstab文件是否ok
[root@qiudao ~]# mount -a
PS: 如果不檢查寫錯了直接重啟, 會導致系統無法啟動.
4./etc/fstab配置文件編寫格式
要掛載的設備 | 掛載點(入口) | 文件系統類型 | 掛載參數 | 是否備份 | 是否檢查 |
---|---|---|---|---|---|
/dev/sdb1 | /data | xfs | defaults | 0 | 0 |
第一列:device:這里用來指定你要掛載的文件系統的設備名稱或塊信息,除了指定設備文件外,也可以使用UUID、LABEL來指定分區。
第二列:dir:指定掛載點的路徑;
第三列:type:指定文件系統的類型,如ext3,ext4,xfs等;
第四列:options:指定掛載的參數,默認為defaults;
參數 | 含義 |
---|---|
async/sync | 是否同步方式運行,默認async(異步)。 |
user/nouser | 是否允許普通用戶使用mount命令掛載,默認nouser。 |
exec/noexec | 是否允許可執行文件執行,默認exec。 |
suid/nosuid | 是否允許存在suid屬性的文件,默認suid。 |
auto/noauto | 執行mount -a時,此文件系統是否被主動掛載,默認auto。 |
rw/ro | 是否只讀或者讀寫模式進行掛載。默認rw。 |
default | 具有rw,suid,exec,auto,nouser,async等默認參數的設定。 |
第五列:dump:表示該掛載后的文件系統能否被dump備份命令作用;
選項 | 含義 |
---|---|
0 | 代表不做備份。 |
1 | 代表要每天進行備份操作。 |
2 | 代表不定日期的進行備份操作。 |
第六列:pass:這里用來指定如何使用fsck來檢查硬盤。
選項 | 含義 |
---|---|
0 | 代表不檢查 |
1 | 檢驗,掛載點為 / 的(即根分區)時候,必須在這里填寫1,其他的都不能填寫1。 |
2 | 檢驗 (當1級別檢驗完成之后進行2級別檢驗) |
05. 磁盤練習題
1.准備一個200GB的磁盤空間
2.掛載到/data目錄下
3.往目錄里存放一個 "docs|txt"
4.實現開機掛載(請測試)
5.隨意修改/etc/fstab重啟系統, 進入修復.
6.准備一個200GB的磁盤空間
7.掛載到/data_read目錄下
8.無法往/data_read目錄中寫入文件
7. 虛擬內存Swap介紹
Swap分區在系統的物理內存不足時,將硬盤空間中的一部分空間釋放出來,以供當前運行的程序使用。
PS:當物理內存不足時會隨機kill掉占用內存的進程,從而產生oom,臨時使用swap可以解決。
1.創建分區,並格式化為swap分區
[root@qiudao ~]# fdisk /dev/sdb #分1個G大小
[root@qiudao ~]# mkswap /dev/sdb1 #格式化為swap
2.查看當前swap分區大小,然后進行擴展和縮小
[root@qiudao ~]# free -m
total used free shared buff/cache available
Mem: 1980 1475 80 10 424 242
Swap: 2047 4 2043
3.擴展swap分區大小
[root@qiudao ~]# swapon /dev/sdb1
[root@qiudao ~]# free -m
total used free shared buff/cache available
Mem: 1980 1475 80 10 424 242
Swap: 3047 4 2043
4.縮小swap分區大小
[root@qiudao ~]# swapoff /dev/sdb1
[root@qiudao ~]# free -m
total used free shared buff/cache available
Mem: 1980 1475 80 10 424 242
Swap: 2047 4 2043
[root@qiudao ~]# swapoff -a #代表關閉所有的swap
5.檢查當前swap分區有哪些設備
[root@qiudao ~]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 2097148 4616 -2
/dev/sdb1 partition 1048572 0 -2
6.如果磁盤沒有過多的分區可用,也可以通過文件增加SWAP空間,本質上還是磁盤
[root@qiudao ~]# dd if=/dev/zero of=/opt/swap_file bs=1M count=500
[root@qiudao ~]# chmod 0600 /opt/swap_file
[root@qiudao ~]# mkswap -f /opt/swap_file
[root@qiudao ~]# swapon /opt/swap_file
[root@qiudao ~]# free -m
PS: 如果希望swap開機自動掛載,將swap信息追加至/etc/fstab即可。
8. 磁盤陣列RAID概述
01. 什么是RAID磁盤陣列
RAID簡稱磁盤陣列,那么什么是陣列,例如
:古代打仗時為什么要對士兵進行排兵布陣,其目的在於提高士兵整體的作戰能力,而不是某個士兵的戰斗力。
那么回到磁盤中,我們也可以將多塊磁盤組合進行排列,提高磁盤的整體的讀寫能力和冗余能力,通常我們將其稱為磁盤陣列。
2.為什么要使用RAID磁盤陣列
1.在RAID中,可以讓很多磁盤同時傳輸數據,因為多塊磁盤在邏輯上感覺是一個磁盤,所以使用RAID可以達到單個磁盤的幾倍、幾十倍甚至上百倍的速率。
2.硬盤其實非常的脆弱,它經常會壞掉。所以有了RAID這個東西。它的目的是將好幾個硬盤合並在一起,就算硬盤壞了一個,剩下還有好幾個硬盤是正常的,這樣服務器還能正常提供服務。保證磁盤高可用。
3.可以獲得更高的容量。
PS:RAID可以預防數據丟失,但並不能百分百保證數據不丟,所以在使用RAID的同時還是要備份重要的數據。
3.實現磁盤陣列RAID的幾種模式
一、RAID0條帶卷,最少兩塊硬盤(單塊也可以做)。讀寫性能好,但沒有容錯機制。壞一塊硬盤數據全丟。
二、RAID1鏡像源,只能兩塊硬盤,寫入性能慢,讀取性能一般、有容錯機制,但磁盤有50%浪費。
三、RAID5校驗卷,至少三塊硬盤,只允許壞一塊盤,有效空間1/3,讀寫速度稍快。壞掉一塊硬盤后,讀會慢。
四、RAID10,先做RAID1,在做RAID0,至少四塊硬盤,讀寫很快,有容錯機制,但磁盤有50%浪費。
五、RAID總結:
冗余從好到壞:Raid1==>Raid10==>Raid5==>Raid0
性能從好到壞:Raid0==>Raid10==>Raid5==>Raid1
成本從低到高:Raid0==>Raid5==>Raid1==>Raid10
企業中的服務器如何選擇Raid級別:根據數據的存儲和訪問的需求,去匹配對應的Raid級別。這句話適用於互聯網的所有公司。




4.磁盤陣列RAID創建的兩種方式
1、軟件RAID
通過系統功能或ID軟件實現RAID,沒有獨立硬件和接口,需要占用一定的系統資源(CPU、硬盤接口速度),並且受操作系統穩定性影響;
2、硬件RAID(視頻)
通過獨立的ID硬件卡實現,有些主板集成ID硬件,有些需要購買獨立的ID硬件卡,硬件RAID不需要占用其他硬件資源,穩定性和速度都比軟件RAID要強
PS:實際生產環境中RAID通常是使用硬RAID方式。如果使用的是公用雲,那么廠商會將該問題解決。
5.RAID硬盤失效處理--熱備和熱插拔
熱備:HotSpare
定義:當冗余的RAID組中某個硬盤失效時,在不干擾當前RAID系統的正常使用的情況下,用RAID系統中另外一個正常的備用硬盤自動頂替失效硬盤,及時保證RAID系統的冗余性
全局式:備用硬盤為系統中所有的冗余RAID組共享
專用式:備用硬盤為系統中某一組冗余RAID組專用
熱插拔:HotSwap
定義:在不影響系統正常運轉的情況下,用正常的硬盤物理替換RAID系統中失效硬盤
關鍵在於熱插拔時電子器件的保護機制
9. 磁盤陣列RAID實戰
1.由於使用Linux操作系統模擬的軟RAID,所以需要在虛擬機上添加多塊硬盤。
直接在虛擬機中添加即可。
2.同時我們還需要知道創建軟RAID使用什么命令。mdadm,如果沒有,直接yum進行安裝即可
[root@qiudao ~]# yum install mdadm -y
3.mdadm磁盤陣列命令選項**
PS:
1、我們做硬件RAID,是在裝系統前還是之后?
前
2、raid5需要3塊硬盤,那么使用4塊硬盤,可以做raid5嗎?
可以 n-1/n
Linux內核中有一個md模塊在底層管理RAID設備,它會在應用層給我們提供一個管理軟RAID的應用工具mdadm
mdadm命令常見選項解釋:
-A #激活磁盤陣列
-C #建立一個新陣列
-D #打印陣列設備的信息
-G #改變陣列大小或形態
-S #停止陣列
-r #移除設備
-l #設定磁盤陣列的級別
-n #指定陣列磁盤的數量
-x #指定陣列中備用盤的數量
-f #將設備狀態定為故障
-a #添加設備到陣列
-v #顯示詳細信息軟RAID:通過操作系統實現
4.實驗環境:
Raid種類 | 磁盤 | 熱備盤 |
---|---|---|
Raid0 | sdb、sdc | |
Raid1 | sdd、sde | sdf |
Raid5 | sdg、sdh、sdi | sdj |
Raid10 | 分區:sdk1,sdk2,sdk3.sdk4 |
[root@qiudao ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sdf 8:80 0 20G 0 disk
sdg 8:96 0 20G 0 disk
sdh 8:112 0 20G 0 disk
sdi 8:128 0 20G 0 disk
sdj 8:144 0 20G 0 disk
sdk 8:160 0 20G 0 disk
RAID0
創建RAID0實驗環境:
Raid種類 | 磁盤 | 熱備盤 |
---|---|---|
Raid0 | sdb、sdc |

1、創建Raid0
[root@qiudao ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc
2、查看陣列信息
[root@qiudao ~]# mdadm -Ds #找到丟失的信息。
[root@qiudao ~]# mdadm -D /dev/md0
3、生成配置文件
[root@qiudao ~]# mdadm -Ds > /etc/mdadm.conf
4、對創建的RAID0進行文件系統創建並掛載
[root@qiudao ~]# mkfs.xfs /dev/md0p1
[root@qiudao ~]# mkdir /raid0
[root@qiudao ~]# mount /dev/md0p1 /raid0/
[root@qiudao ~]# df -Th /raid0/
RAID1
創建RAID0實驗環境:
Raid種類 | 磁盤 | 熱備盤 |
---|---|---|
Raid1 | sdd、sde | sdf |
1)創建RAID1,並添加1個熱備盤
2)模擬磁盤故障,看備用盤是否會自動頂替故障盤
3)從raid1中移出故障盤
1、創建RAID1
[root@qiudao ~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[d,e,f]
[root@qiudao ~]# mdadm -Dsv > /etc/mdadm.conf
2、查看RAID陣列信息
[root@qiudao ~]# mdadm -D /dev/md1
3、在RAID設備上創建文件系統
[root@qiudao ~]# mkfs.xfs /dev/md1
[root@qiudao ~]# mkdir /raid1
[root@qiudao ~]# mount /dev/md1 /raid1/
[root@qiudao ~]# cp /etc/passwd /raid1/
4、下面模擬RAID1中數據盤/dev/sde出現故障,觀察/dev/sdf備用盤能否自動頂替故障盤
[root@qiudao ~]# mdadm /dev/md1 -f /dev/sde
5、查看一下陣列狀態信息
[root@qiudao ~]# mdadm -D /dev/md1
Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdg
2 8 128 1 spare rebuilding /dev/sdi #熱備盤已經在同步數據
1 8 112 - faulty /dev/sdh
6、查看數據是否丟失
[root@qiudao ~]# ls /raid1/ #數據正常,沒有丟失
7、移除損壞的設備:
[root@qiudao ~]# mdadm -r /dev/md1 /dev/sde
8、檢查是否還存在熱備盤
[root@qiudao ~]# mdadm -D /dev/md1
Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdd
2 8 128 1 active sync /dev/sdf
9、重新在添加一塊新熱備盤
[root@qiudao ~]# mdadm -a /dev/md1 /dev/sde
RAID5
創建RAID5實驗環境:
Raid種類 | 磁盤 | 熱備盤 |
---|---|---|
Raid5 | sdg、sdh、sdi | sdj |
1)使用三塊盤創建RAID5, 使用-x添加1個熱備盤
2)模擬損壞一塊磁盤,然后備用盤自動頂上,只能頂一次
3)在模擬損壞,檢測數據是否丟失,如果沒有再次模擬損壞.
1、創建RAID5陣列,添加一塊備用盤
[root@qiudao ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 /dev/sd{g,h,i,j}
2、格式化RAID5,並掛載使用
[root@qiudao ~]# mkfs.xfs /dev/md5
[root@qiudao ~]# mkdir /raid5
[root@qiudao ~]# mount /dev/md5 /raid5/
3、檢查RAID詳情
[root@qiudao ~]# mdadm -D /dev/md5
4、模擬一塊磁盤損壞
[root@qiudao ~]# mdadm -f /dev/md5 /dev/sdj
5 檢查備用盤是否頂上
[root@qiudao ~]# mdadm -D /dev/md5
6、在模擬一塊磁盤損壞
[root@qiudao ~]# mdadm -f /dev/md5 /dev/sdh
......持續此步驟進行驗證
RAID10
創建RAID10實驗環境:
Raid種類 | 磁盤 | 熱備盤 |
---|---|---|
Raid10 | 分區:sdk1,sdk2,sdk3.sdk4 |

1、分4個主分區,每個分區1G大小
[root@qiudao ~]# fdisk /dev/sdk
2、簡單測試是否能成功創建RAID10
[root@qiudao ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sdk[1-4]
3、查看RAID詳情
[root@qiudao ~]# mdadm -D /dev/md10
4、格式化並掛載
[root@qiudao ~]# mkfs.xfs /dev/md10
[root@qiudao ~]# mkdir /raid10
[root@qiudao ~]# mount /dev/md10 /raid10
[root@qiudao ~]# cp /etc/services /raid10
5、模擬一塊磁盤損壞
[root@qiudao ~]# mdadm -f /dev/md10 /dev/sdk2
總結
PS:重啟后RAID將全部失效。如果希望永久生效,請將RAID信息寫入/etc/mdadm.conf配置文件,同時還需要將掛載信息寫入/etc/fstab文件中。
10. 邏輯卷LVM概述
01. 什么是LVM?
LVM是Logical Volume Manager (邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制。又譯為邏輯卷宗管理器、邏輯扇區管理器、邏輯磁盤管理器,是Linux核心所提供的邏輯卷管理(Logical volume management)功能。它在硬盤的分區之上,又創建一個邏輯層,以方便系統管理硬盤分區系統。
最先由IBM開發,在AIX系統上實現,OS/2 操作系統與 HP-UX也支持這個功能。在1998年,Heinz Mauelshagen 根據在 HP-UX 上的邏輯卷管理器,寫作出第一個 Linux 版本的邏輯卷管理器。
02. LVM解決了什么問題
當我們剛開始安裝Linux操作系統是遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。
普通的磁盤分區好之后就無法改變其大小,而遇到出現某個分區空間耗盡時,解決的方法可以是符號鏈接,或者調整分區大小的工具,但這只是暫時解決方法,沒有從根本上解決問題。
隨着Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,用戶可以在無需停機的請款下可以方便的調整各個分區大小。

03. LVM基本概念
物理卷(PV):(physical volume),把常規的磁盤設備通過pvcreate命令對其進行初始化,形成了物理卷。其實就是硬盤或分區。(面粉)
卷組(VG):(volume group),把多個物理卷組成一個邏輯的整體,這樣卷組的大小就是多個硬盤之和。或者理解就是由一個或多個PV組成的整體。(面團)
邏輯卷(LV):(logical volume),從卷組中划分需要的空間大小出來。用戶僅需對其格式化然后即可掛載使用。從VG中切割出的空間用於創建文件系統。(切成饅頭)
基本單元(PE):(physical extend),分配的邏輯大小的最小單元,默認為4MB的基本塊。(假設分配100MB邏輯空間,則需要創建25個PE)
11. 邏輯卷LVM實踐
01. 邏輯卷實踐
1)創建物理卷,將普通磁盤轉換為物理卷。
2)創建卷組,將物理卷加入到卷組中。
3)在卷組中划分邏輯卷,然后掛載使用。
1. 准備物理磁盤,如果是虛擬機需要關閉添加磁盤,以便更好的實驗
[root@qiudao ~]# lsblk
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
2. 將磁盤轉換為物理卷
#下載安裝軟件包
[root@qiudao ~]# yum install -y lvm2
[root@qiudao ~]# pvcreate /dev/sdb
3. 將/dev/sdb物理卷加入卷組(資源池)-->名字lvm_test
[root@qiudao ~]# vgcreate lvm_test /dev/sdb
#檢查卷組
[root@qiudao ~]# vgs
4. 創建邏輯卷,分配名稱,以及大小,指定卷組
選項:
-L #邏輯卷大小
-n #邏輯卷名字
[root@qiudao ~]# lvcreate -L 100M -n lv1 lvm_test ##將lvm_test分配給lv1
5. 格式化邏輯卷
[root@qiudao ~]# mkfs.xfs /dev/lvm_test/lv1
6. 掛載使用
[root@qiudao ~]# mkdir /lv1
[root@qiudao ~]# mount /dev/lvm_test/lv1 /lv1/
[root@qiudao ~]# cp /etc/services /lv1/
02. 卷組管理,如何擴展卷組大小,如何刪除卷組
1. 如何擴大VG卷組
\#1.新硬盤加入pv
[root@qiudao ~]# pvcreate /dev/sdc
\#2.先檢查當前的vg卷組大小
[root@oldboyedu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 1 1 0 wz--n- 1020.00m 920.00m
\#3.使用vgextend擴展卷組
[root@qiudao ~]# vgextend lvm_test /dev/sdc
Volume group "lvm_test" successfully extended
\#4.再次檢查,發現卷組已經擴大
[root@oldboyedu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 2 1 0 wz--n- 1.99g 1.89g
2. 假設想移除/dev/sdb磁盤,建議先將sdb磁盤數據先遷移到sdc磁盤,然后在移除。(同一卷組的磁盤才可以進行在線遷移),(注意卷組的名稱---)

#1.檢查當前邏輯卷VG中PV使用情況
[root@qiudao ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 1.76g
/dev/sdc vg1 lvm2 a -- 2.00g 2.00g
#2.pvmove在線數據遷移,將sdb的數據遷移至sdc
[root@qiudao ~]# pvmove /dev/sdb
/dev/sdb: Moved: 100.00%
#3.檢查是否將sdb數據遷移至sdc
[root@qiudao ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 2.00g
/dev/sdc vg1 lvm2 a -- 2.00g 1.76g
#4.從卷組中移除sdb磁盤
[root@qiudao ~]# vgreduce lvm_test /dev/sdb
Removed "/dev/sdb" from volume group "lvm_test"
3. 邏輯卷管理,動態的調整邏輯卷大小
01. 邏輯卷的擴展,是取決於vg卷中是否還有剩余的容量,注意擴展邏輯卷不能超過卷組VG的總大小
[root@qiudao ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datavg 1 1 0 wz--n- 1020.00m 920.00m
\#1.擴展lv邏輯卷,增加800M分配給邏輯卷 {注意: 800M +800M 不一樣}
[root@qiudao ~]# lvextend -L +800M /dev/lvm_test/lv1
\#或者可以選擇分配磁盤池中多少百分比給邏輯卷
[root@qiudao ~]# lvextend -l +50%FREE /dev/lvm_test/lv1
\#2.擴展邏輯卷后需要更新fs文件系統
[root@qiudao ~]# xfs_growfs /dev/lvm_testvg/lv1 #xfs文件格式擴容
02. 縮小邏輯卷,不要去操作,因為線上在使用的磁盤真的敢操作嗎?
03. 刪除邏輯卷,如果不想使用邏輯卷可以選擇刪除。

[root@qiudao ~]# umount /dev/lvm_test/lv1
[root@qiudao ~]# lvremove /dev/lvm_test/lv1
Do you really want to remove active logical volume lvm_test/lv1? [y/n]: y
Logical volume "lv1" successfully removed
注意:LVM如果有一個磁盤損壞,整個lvm都壞了, lvm只有動態擴展作用,底層用RAID + 上層LVM = 既有冗余又有動態擴展
12. 磁盤常見故障
01. 磁盤block滿故障
\#環境准備,先創建一個2G大小的分區
[root@qiudao ~]# lsblk /dev/sdb1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb1 8:17 0 2G 0 part /data
[root@qiudao ~]# df -h |grep sdb1
/dev/sdb1 2.0G 33M 2.0G 2% /data
\#准備一個大文件,發現分區已經報錯“No space left on device”
[root@qiudao ~]# dd if=/dev/zero of=/data/test.txt bs=100M count=180
dd: error writing ‘/data/test.txt’: No space left on device
21+0 records in
20+0 records out
2101149696 bytes (2.1 GB) copied, 22.0136 s, 95.4 MB/s
\#再次在該分區下面添加新文件,已經提示報錯。
[root@qiudao ~]# cp Desktop.zip /data/
cp: error writing ‘/data/Desktop.zip’: No space left on device
cp: failed to extend ‘/data/Desktop.zip’: No space left on device
\#解決思路:先找到大小太大的目錄。
[root@qiudao ~]# du -sh /* |grep G
\#再依次向下查找,直到找到大文件為止。
[root@qiudao ~]# du -sh /data/* |grep G
2.0G /data/test.txt
\#找到文件之后,首先要確認好之后再刪除,不要直接的去刪除
[root@qiudao ~]# rm -f /data/test.txt
[root@qiudao ~]# df -h |grep sdb1
/dev/sdb1 2.0G 35M 2.0G 2% /data
注意:如果該文件存在硬鏈接,一定要把硬鏈接文件刪除。

02. 磁盤inode滿故障
\#環境准備,創建一個30M的分區。
[root@qiudao ~]# df -h |grep sdb1
dev/sdb1 27M 1.6M 26M 6% /test
[root@qiudao ~]# lsblk |grep sdb1
└─sdb1 8:17 0 30M 0 part /test
\#批量創建大量的小文件
[root@qiudao ~]# touch /test/data/file/{1..15360}.txt
\#再去到該分區中創建新的文件就會報錯。
[root@qiudao ~]# touch /test/test.txt
touch: cannot touch ‘/test/test.txt’: No space left on device
\#解決思路:查看磁盤分區使用情況,發現磁盤空間是正常的,再次查看inode,發現inode滿了。
[root@qiudao ~]# df -h |grep sdb1
/dev/sdb1 27M 9.7M 17M 37% /test
[root@qiudao ~]# df -i |grep sdb1
/dev/sdb1 15424 15424 0 100% /test
\#怎樣找出大量的小文件呢?首先要找出大目錄(小文件過多,會導致目錄變大。)
[root@qiudao ~]# find /test -type d -size +300k |xargs ls -lhd
\#找到大量小文件之后,首先要確認好之后再刪除,不要直接的去刪除
[root@qiudao ~]# find /test/data/file/ -type f -delete
\#檢查結果
[root@qiudao ~]# df -i |grep sdb1
/dev/sdb1 15424 5 15419 1% /test