LINUX磁盤管理

一. 什么是磁盤

絕大多數(shù)人對硬盤都不陌生,
一塊小小的硬盤里,就可以存儲海量的照片、音樂和電影等,尤其是你們喜愛的各類**動作片。
但如此小的空間,是如何存儲那么多信息的呢?



每個硬盤中心都是一摞高速運轉(zhuǎn)的圓盤,圓盤由一層帶磁的微型金屬顆粒組成,每個顆粒也被稱為一個比特,都有自己的磁化程度,用于存儲0個1。



當記錄數(shù)據(jù)時,硬盤的磁頭開始通電,行成強磁場,數(shù)據(jù)在磁場的作用下轉(zhuǎn)變成電流,從而將信息記錄在圓盤上。

由海量顆粒組成的信息,就是我們存在硬盤里的數(shù)據(jù)。


1.什么是磁盤、軟盤、硬盤?

1.1.什么是磁盤?

磁盤是指利用磁記錄技術(shù)存儲數(shù)據(jù)的存儲器,是所有硬式存儲的統(tǒng)稱,如最早出現(xiàn)的軟盤,現(xiàn)在的硬盤,都是磁盤中的一部分。

1.2.什么是軟盤?

磁盤開始指的是1.44MB的3.5英寸磁盤,這是很早時候的電腦儲存盤,也叫軟盤。
軟盤在如今已經(jīng)很少被使用了,使用軟盤需要安裝軟盤驅(qū)動。軟盤容量小,容易損壞。隨著數(shù)據(jù)的大量增長,軟盤已經(jīng)不滿足日益所需的數(shù)據(jù)存儲需求,所以,硬盤便被研發(fā)了出來。

1.3什么是硬盤?

硬盤就是一種最為常見的外存儲器,它好比是數(shù)據(jù)的外部倉庫一樣。電腦除了要有“工作間”,還要有專門存儲東西的倉庫。是計算機中的最大的存儲裝置了,我們會將磁盤的儲存片裝到硬質(zhì)金屬盒子里,這樣就可以得到更好的保護,而且在使用壽命上也比軟盤優(yōu)越得多,只有低格的時候才會對硬盤有很大的傷害。

1.4.磁盤與軟盤硬盤的關(guān)系?

磁盤是一種統(tǒng)稱,即是一開始的軟盤,又是現(xiàn)如今的硬盤,但是在現(xiàn)在,說起磁盤,都指的是硬盤。

2. 磁盤的基本結(jié)構(gòu)

2.1 什么是盤片

盤片是硬盤中承載數(shù)據(jù)存儲的介質(zhì)。硬盤盤片是以堅固耐用的材料為盤基,將磁粉附著在鋁合金(新材料也有用玻璃)圓盤片的表面上,表面被加工的相當平滑。這些磁粉被劃分成稱為磁道的若干個同心圓,在每個同心圓的磁道上就好像有無數(shù)的任意排列的小磁鐵,它們分別代表著0和1的狀態(tài)。當這些小磁鐵受到來自磁頭的磁力影響時,其排列的方向會隨之改變。
利用磁頭的磁力控制指定的一些小磁鐵方向,使每個小磁鐵都可以用來儲存信息。硬盤是由多個盤片疊加在一起,互相之間由墊圈隔開。
硬盤中一般會有多個盤片,每個盤片包含兩個面,每個盤面都對應(yīng)地有一個讀/寫磁頭(Head,簡寫為H)。受到硬盤整體體積和生產(chǎn)成本的限制,盤片數(shù)量都受到限制,一般都在5片以內(nèi)。盤片的編號自下向上從0開始,如最下邊的盤片有0面和1面,再上一個盤片就編號為2面和3面。


2. 2什么是磁道

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


2.3 什么是扇區(qū)

在硬盤出廠時會對磁盤進行一次低級格式化,其實就是再將每個磁道劃分為若干個弧段,每個弧段就是一個扇區(qū)(Sector)。若干個扇區(qū)就組成整個盤片,硬盤的讀寫以扇區(qū)為基本單位。這種以簇為最小分配單位的機制,使硬盤對數(shù)據(jù)的管理變得相對容易。現(xiàn)在每個扇區(qū)可存儲512字節(jié)數(shù)據(jù),已經(jīng)成了業(yè)界的約定。
低級格式化就是將空白的磁盤劃分出柱面和磁道,再將磁道劃分為若干個扇區(qū),每個扇區(qū)又劃分出標識部分ID、間隔區(qū)GAP和數(shù)據(jù)區(qū)DATA等。
硬盤低級格式化的功用:硬盤低級格式化是對硬盤最徹底的初始化方式,經(jīng)過低格后的硬盤,原來保存的數(shù)據(jù)將會全部丟失,所以一般來說低格硬盤是非常不可取的,只有非常必要的時候才能低格硬盤。而這個所謂的必要時候有兩種,一是硬盤出廠前,硬盤廠會對硬盤進行一次低級格式化;另一個是當硬盤出現(xiàn)某種類型的壞道時,使用低級格式化能起到一定的緩解或者屏蔽作用。


2.4 什么是柱面

柱面實際上就是我們抽象出來的一個邏輯概念,簡單來說就是處于同一個垂直區(qū)域的磁道稱為柱面,即各盤面上面相同位置的集合,這樣數(shù)據(jù)如果存儲到相同半徑磁道上的同一扇區(qū),這樣可以實現(xiàn)并行讀取,主要是減少磁頭尋道時間。


2.5 什么是磁頭

磁頭是硬盤中最昂貴的部件,也是硬盤技術(shù)中最重要和最關(guān)鍵的一環(huán)。主要作用是讀取磁盤磁道上面的金屬塊,負責(zé)讀或?qū)懭霐?shù)據(jù)。

image

磁盤整體結(jié)構(gòu)圖


二. 磁盤的預(yù)備知識

我們需要了解下磁盤的接口類型,磁盤涉及的相關(guān)術(shù)語,磁盤在Linux下的命令方式

2.1 磁盤的接口類型

IDE,SCSI (已經(jīng)被淘汰)


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

SSD(支持SATA、PCI-E)

你了解M.2固態(tài)硬盤嗎?

裝機到底要不要買M.2接口的SSD?

SATA、MSATA、PCIE和M2都是什么?

固態(tài)硬盤SATA和MSATA有什么區(qū)別?

機械和固態(tài)的對比

機械(HDD) 固態(tài)(SSD)
容量大價格低 容量小價格高
抗擊打能力弱 抗擊打能力高
讀寫速度慢 讀寫速度很快
數(shù)據(jù)恢復(fù)易 數(shù)據(jù)恢復(fù)難
使用時間無限 使用時間1-2w次

2.2 磁盤的基本術(shù)語

尺寸:2.5英寸、3.5英寸
容量:B、KB、MB、GB、TB、PB、EB
轉(zhuǎn)速:5.4k、7.2k、10k、15k,單位表示為RPM,RPM是Revolutions per minute的縮寫,是轉(zhuǎn)/每分鐘。
IOPS:每秒能夠發(fā)生IO的次數(shù)

2.3 磁盤在系統(tǒng)上的命名方式

設(shè)備名稱 分區(qū)信息 設(shè)備類型
/dev/sda /dev/sda1 第一塊物理磁盤第一分區(qū)
/dev/sdb /dev/sdb2 第二塊磁盤第二個分區(qū)
/dev/vdd /dev/vdd4 第四塊虛擬磁盤的第四個分區(qū)

PS1:系統(tǒng)中分區(qū)由數(shù)字編號表示,1-4表示給主分區(qū)使用和擴展分區(qū),邏輯分區(qū)從5開始,為什么分區(qū)還有限制?不應(yīng)該是隨意分配?因為MBR分區(qū)表只能分配4個主分區(qū)?why?
[MBR為什么只能劃分4個主分區(qū)?]
PS2:前面我們已經(jīng)提到過MBR分區(qū)表只能分配4個主分區(qū),但現(xiàn)在還有一種新型的分區(qū)表GPT,GPT支持分配128個主分區(qū)。注意MBR與GPT之間不能互轉(zhuǎn),會導(dǎo)致數(shù)據(jù)丟失。
MBR與GPT之間又有什么區(qū)別?

MBR位置:0磁頭0磁道1扇區(qū)。


常用查看磁盤的命令

#如何查看磁盤的大小及文件內(nèi)容的大小
[root@qls ~]# du -sh /etc/
34M /etc/
#查看磁盤使用情況
[root@qls ~]# 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
?
#查看設(shè)備詳情,以及分區(qū)的情況
[root@qls ~]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  40G  0 disk 
└─vda1 253:1    0  40G  0 part /

在linux中,當我們給系統(tǒng)添加一塊新硬盤時,我們是無法使用的,因為他還沒有分區(qū)和格式化,只有當我們將新硬盤分區(qū)并格式化之后,掛載在某個目錄下,才能供我們正常使用,接下來我們要學(xué)習(xí)兩種種硬盤分區(qū)工具,F(xiàn)disk,Gdisk;分別是針對于MBR分區(qū)格式,GPT分區(qū)格式進行分區(qū)。還有一種高級分區(qū)工具Parted(可以針對于多種分區(qū)表進行分區(qū),使用起來也是比較復(fù)雜的,不建議使用)。

三. 磁盤基本分區(qū)Fdisk

適用于磁盤小于2TB的磁盤,分區(qū)類型MBR,主分區(qū)4或主分區(qū)3+擴展分區(qū)(邏輯分區(qū)+…),分區(qū)后需要保存后才能生效

1. 先準備磁盤

由于沒有真實的服務(wù)器,只能添加虛擬的磁盤,VMware中添加硬盤,添加一塊20G的硬盤。

2.分區(qū)fdisk--->分低于2TB的磁盤

[root@qls ~]# 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@qls ~]# 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@qls ~]# fdisk  /dev/sdb
Command (m for help): m         #輸入m列出常用的命令
Command action
 a   toggle a bootable flag                   #切換分區(qū)啟動標記
 b   edit bsd disklabel                       #編輯sdb磁盤標簽
 c   toggle the dos compatibility flag        #切換dos兼容模式
 d   delete a partition                       #刪除分區(qū)
 l   list known partition types               #顯示分區(qū)類型
 m   print this menu                          #顯示幫助菜單
 n   add a new partition                      #新建分區(qū)
 o   create a new empty DOS partition table   #創(chuàng)建新的空白分區(qū)表
 p   print the partition table                #顯示分區(qū)表的信息
 q   quit without saving changes              #不保存退出
 s   create a new empty Sun disklabel         #創(chuàng)建新的Sun磁盤標簽
 t   change a partitions system id            #修改分區(qū)ID,可以通過l查看id
 u   change display/entry units               #修改容量單位,磁柱或扇區(qū)
 v   verify the partition table               #檢驗分區(qū)表
 w   write table to disk and exit             #保存退出
 x   extra functionality (experts only)       #拓展功能
?
#分配第1個分區(qū)
[root@qls ~]# fdisk /dev/sdb 
Command (m for help): n    
Partition type:
 p   primary (0 primary, 0 extended, 4 free)
 e   extended
Select (default p): p           #選擇分配主分區(qū)
Partition number (1-4, default 1):      #主分區(qū)編號        
First sector (2048-41943039, default 2048):     #開始的扇區(qū) 回車即可
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G #設(shè)置分區(qū)的大小
Partition 1 of type Linux and of size 1 GiB is set
?
Command (m for help): p     #查看當前磁盤的分區(qū)情況
?
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
?
?
#分配第2個分區(qū)
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個分區(qū)     (超出了4個主分區(qū),最佳 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
#檢查分區(qū)情況
[root@qls ~]# 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 

3. 格式化->創(chuàng)建文件系統(tǒng)(裝修)

[root@qls ~]#  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

4. 掛載

[root@qls /]# mount /dev/sdb1 /soft/        #將/soft作為/dev/sdb1分區(qū)的一個入口目錄
[root@qls /]# touch /soft/1111          #添加111文件,實際上是在/dev/sdb1分區(qū)上添加的數(shù)據(jù)
[root@qls /]# ls /soft/
1111
[root@qls /]# umount /soft/                 #卸載/soft掛載信息
[root@qls /]# ls /soft/                     #soft又回到了原來的目錄屬性
nginx  nginx-1.16.0
---------注意: 原來寫入到/dev/sdb1分區(qū)的數(shù)據(jù)不會被刪除,當重新掛載一個新的目錄,文件還會回來.
[root@qls /]# mkdir /data
[root@qls /]# mount /dev/sdb1 /data/
[root@qls /]# ls /data/
1111

5. 實現(xiàn)永久掛載,寫入配置文件/etc/fstab 以實現(xiàn)開機時,自動掛載

[root@qls ~]# cat /etc/fstab
#設(shè)備名稱   掛載的位置   文件系統(tǒng)類型  掛載的參數(shù)   是否備份    是否檢查
/dev/sdb1   /data       xfs         defaults    0           0
#請先卸載掛載的信息,然后再mount -a
[root@qls ~]# mount -a

五. 磁盤基本分區(qū)Gdisk

分區(qū)表為GPT,主分區(qū)128,分區(qū)后需要保存后才生效
1. 準備環(huán)境

VMware中添加硬盤,添加一塊2T的硬盤。
#安裝軟件包
[root@qls ~]# yum install gdisk -y

2. 創(chuàng)建分區(qū)

[root@qls ~]# 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@qls ~]# 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數(shù)據(jù)備份到文件中
c   change a partition's name                           #更改分區(qū)的名稱
d   delete a partition                                  #刪除分區(qū)
i   show detailed information on a partition            #顯示分區(qū)的詳細信息
l   list known partition types                          #列出已知的分區(qū)類型
n   add a new partition                                 #添加一個新的分區(qū)
o   create a new empty GUID partition table (GPT)       #創(chuàng)建一個新的空GUID分區(qū)表(GPT)
p   print the partition table                           #打印分區(qū)表
q   quit without saving changes                         #沒有保存更改就退出
r   recovery and transformation options (experts only)  #恢復(fù)和轉(zhuǎn)換選項(僅限專家使用)
s   sort partitions                                     #年代分類分區(qū)
t   change a partition's type code                      #不要更改分區(qū)的類型代碼
v   verify disk                                         #驗證磁盤
w   write table to disk and exit                        #將表寫入磁盤并退出
x   extra functionality (experts only)                  #額外功能(僅限專家使用)
?   print this menu                                     #打印菜單
?
Command (? for help): n     #創(chuàng)建新的分區(qū)
Partition number (1-128, default 1):    #分區(qū)編號
First sector (34-4294967262, default = 2048) or {+-}size{KMGTP}:    #扇區(qū)開始位置
Last sector (2048-4294967262, default = 4294967262) or {+-}size{KMGTP}: #設(shè)置分區(qū)大小
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L     #查看文件系統(tǒng),默認是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     #打印分區(qū)表信息
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@qls ~]# 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. 格式化->創(chuàng)建文件系統(tǒng)(裝修)

[root@qls ~]# 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@qls ~]# mkdir /gbt
[root@qls ~]# mount /dev/sdc1 /gbt
[root@qls ~]# cd /gbt
[root@qls /gbt]# ll
total 0
[root@qls /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@qls /gbt]# ll
total 1024000
-rw-r--r-- 1 root root 1048576000 Jul  9 23:48 test.txt
[root@qls /gbt]# cd
[root@qls ~]# 
[root@qls ~]# umount /gbt
[root@qls ~]# ll /gbt
total 0

5. 實現(xiàn)永久掛載,寫入配置文件/etc/fstab 以實現(xiàn)開機時,自動掛載

[root@qls ~]# cat /etc/fstab
#設(shè)備名稱   掛載的位置   文件系統(tǒng)類型  掛載的參數(shù)   是否備份    是否檢查
/dev/sdc1   /gbt        xfs         defaults    0           0
#請先卸載掛載的信息,然后再mount -a
[root@qls ~]# mount -a

六. 磁盤掛載方式Mount

前面我們已經(jīng)提到過,如果需要使用磁盤的空間,需要準備一個空的目錄作為掛載點,與該設(shè)備進行關(guān)聯(lián)。
mount主要是為文件系統(tǒng)指定一個訪問入口。
PS:類似我的商場沒有門,那么就無法進入購買商品,此時通過mount命令可以創(chuàng)建一個入口。給超市安裝一個門。
1. 通過mount進行掛載,但重啟將會失效;我們稱為臨時生效。

#選項:
 -t  #指定文件系統(tǒng)掛載分區(qū)
 -a  #掛載/etc/fstab中的配置文件
 -o  #指定掛載參數(shù)
#示例:掛載/dev/sdb1至db1目錄
[root@qls ~]# mkdir /db1
[root@qls ~]# mount -t xfs /dev/sdb1 /db1

2. 掛載的磁盤,如果不想使用可以用umount命令進行卸載。

#選項:
 -l  #強制卸載
#示例:
#1.卸載目錄方式
[root@qls ~]# umount /db1
#2.卸載設(shè)備方式
[root@qls ~]# umount /dev/sdb1
#3.umount不能卸載的情況
[root@qls 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. 如果需要實現(xiàn)永久掛載則需要將掛載信息寫入/etc/fstab配置文件中實現(xiàn)

#建議掛載時使用UUID
#1.怎樣獲取磁盤分區(qū)的UUID,使用blkid命令獲取
[root@qls ~]# blkid|grep sdc1
/dev/sdc1: UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b"
#2.手動測試是否能正常的掛載
[root@qls ~]# mount UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b" /datac
#3.將信息寫入到/etc/fstab文件中,保證下次啟動系統(tǒng)自動掛載
UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b" /datac xfs defaults 0 0 
?
#4.卸載/datac掛載信息, 然后使用mount -a檢查/etc/fstab文件是否ok
[root@qls ~]# mount -a
PS: 如果不檢查寫錯了直接重啟,  會導(dǎo)致系統(tǒng)無法啟動. 

4. /etc/fstab配置文件編寫格式

要掛載的設(shè)備 掛載點(入口) 文件系統(tǒng)類型 掛載參數(shù) 是否備份 是否檢查
/dev/sdb1 /data xfs defaults 0 0

第一列:device:這里用來指定你要掛載的文件系統(tǒng)的設(shè)備名稱或塊信息,除了指定設(shè)備文件外,也可以使用UUID、LABEL來指定分區(qū)。
第二列:dir:指定掛載點的路徑;
第三列:type:指定文件系統(tǒng)的類型,如ext3,ext4,xfs等;
第四列:options:指定掛載的參數(shù),默認為defaults;

參數(shù) 含義
async/sync 是否同步方式運行,默認async(異步)。
user/nouser 是否允許普通用戶使用mount命令掛載,默認nouser。
exec/noexec 是否允許可執(zhí)行文件執(zhí)行,默認exec。
suid/nosuid 是否允許存在suid屬性的文件,默認suid。
auto/noauto 執(zhí)行mount -a時,此文件系統(tǒng)是否被主動掛載,默認auto。
rw/ro 是否只讀或者讀寫模式進行掛載。默認rw。
defaults 具有rw,suid,exec,auto,nouser,async等默認參數(shù)的設(shè)定。

第五列:dump:表示該掛載后的文件系統(tǒng)能否被dump備份命令作用;

選項 含義
0 代表不做備份。
1 代表要每天進行備份操作。
2 代表不定日期的進行備份操作。

第六列:pass:這里用來指定如何使用fsck來檢查硬盤。

選項 含義
0 代表不檢查
1 檢驗,掛載點為 / 的(即根分區(qū))時候,必須在這里填寫1,其他的都不能填寫1。
2 檢驗 (當1級別檢驗完成之后進行2級別檢驗)

七. 虛擬內(nèi)存Swap介紹

Swap分區(qū)在系統(tǒng)的物理內(nèi)存不足時,將硬盤空間中的一部分空間釋放出來,以供當前運行的程序使用。
PS:當物理內(nèi)存不足時會隨機kill掉占用內(nèi)存的進程,從而產(chǎn)生oom,臨時使用swap可以解決。
1. 創(chuàng)建分區(qū),并格式化為swap分區(qū)

[root@qls ~]# fdisk  /dev/sdb       #分1個G大小
[root@qls ~]# mkswap /dev/sdb1      #格式化為swap

2. 查看當前swap分區(qū)大小,然后進行擴展和縮小

[root@qls ~]# free -m
 total        used        free      shared  buff/cache   available
Mem:           1980        1475          80          10         424         242
Swap:          2047           4        2043
#1.擴展swap分區(qū)大小
[root@qls ~]# swapon /dev/sdb1
[root@qls ~]# free -m
 total        used        free      shared  buff/cache   available
Mem:           1980        1475          80          10         424         242
Swap:          3047           4        2043
?
#2.縮小swap分區(qū)大小
[root@qls ~]# swapoff /dev/sdb1
[root@qls ~]# free -m
 total        used        free      shared  buff/cache   available
Mem:           1980        1475          80          10         424         242
Swap:          2047           4        2043
[root@qls ~]# swapoff -a #代表關(guān)閉所有的swap

3. 檢查當前swap分區(qū)有哪些設(shè)備

[root@qls ~]# swapon -s
文件名             類型      大小   已用  權(quán)限
/dev/dm-1   partition   2097148   4616    -2
/dev/sdb1   partition   1048572   0       -2

04. 如果磁盤沒有過多的分區(qū)可用,也可以通過文件增加SWAP空間,本質(zhì)上還是磁盤

[root@qls ~]# dd if=/dev/zero of=/opt/swap_file bs=1M count=500
[root@qls ~]# chmod 0600 /opt/swap_file
[root@qls ~]# mkswap -f /opt/swap_file 
[root@qls ~]# swapon /opt/swap_file
[root@qls ~]# free -m
PS: 如果希望swap開機自動掛載,將swap信息追加至/etc/fstab即可。

八. 磁盤陣列RAID概述

1. 什么是RAID磁盤陣列
RAID簡稱磁盤陣列,那么什么是陣列,例如:古代打仗時為什么要對士兵進行排兵布陣,其目的在于提高士兵整體的作戰(zhàn)能力,而不是某個士兵的戰(zhàn)斗力。
那么回到磁盤中,我們也可以將多塊磁盤組合進行排列,提高磁盤的整體的讀寫能力和冗余能力,通常我們將其稱為磁盤陣列。
2. 為什么要使用RAID磁盤陣列
1.在RAID中,可以讓很多磁盤同時傳輸數(shù)據(jù),因為多塊磁盤在邏輯上感覺是一個磁盤,所以使用RAID可以達到單個磁盤的幾倍、幾十倍甚至上百倍的速率。
2.硬盤其實非常的脆弱,它經(jīng)常會壞掉。所以有了RAID這個東西。它的目的是將好幾個硬盤合并在一起,就算硬盤壞了一個,剩下還有好幾個硬盤是正常的,這樣服務(wù)器還能正常提供服務(wù)。保證磁盤高可用。
3.可以獲得更高的容量。
PS:RAID可以預(yù)防數(shù)據(jù)丟失,但并不能百分百保證數(shù)據(jù)不丟,所以在使用RAID的同時還是要備份重要的數(shù)據(jù)。
3. 實現(xiàn)磁盤陣列RAID的幾種模式
一、RAID0條帶卷,最少兩塊硬盤(單塊也可以做)。讀寫性能好,但沒有容錯機制。壞一塊硬盤數(shù)據(jù)全丟。
?
二、RAID1鏡像源,只能兩塊硬盤,寫入性能慢,讀取性能一般、有容錯機制,但磁盤有50%浪費。
?
三、RAID5校驗卷,至少三塊硬盤,只允許壞一塊盤,有效空間1/3,讀寫速度稍快。壞掉一塊硬盤后,讀會慢。

四、RAID10,先做RAID1,在做RAID0,至少四塊硬盤,讀寫很快,有容錯機制,但磁盤有50%浪費。
?
五、RAID總結(jié):
?
冗余從好到壞:Raid1==>Raid10==>Raid5==>Raid0
性能從好到壞:Raid0==>Raid10==>Raid5==>Raid1
成本從低到高:Raid0==>Raid5==>Raid1==>Raid10
企業(yè)中的服務(wù)器如何選擇Raid級別:根據(jù)數(shù)據(jù)的存儲和訪問的需求,去匹配對應(yīng)的Raid級別。這句話適用于互聯(lián)網(wǎng)的所有公司。





4. 磁盤陣列RAID創(chuàng)建的兩種方式

1、軟件RAID
通過系統(tǒng)功能或ID軟件實現(xiàn)RAID,沒有獨立硬件和接口,需要占用一定的系統(tǒng)資源(CPU、硬盤接口速度),并且受操作系統(tǒng)穩(wěn)定性影響;
?
2、硬件RAID(視頻)
通過獨立的ID硬件卡實現(xiàn),有些主板集成ID硬件,有些需要購買獨立的ID硬件卡,硬件RAID不需要占用其他硬件資源,穩(wěn)定性和速度都比軟件RAID要強
?
PS:實際生產(chǎn)環(huán)境中RAID通常是使用硬RAID方式。如果使用的是公用云,那么廠商會將該問題解決。

5. RAID硬盤失效處理--熱備和熱插拔

熱備:HotSpare
?
定義:當冗余的RAID組中某個硬盤失效時,在不干擾當前RAID系統(tǒng)的正常使用的情況下,用RAID系統(tǒng)中另外一個正常的備用硬盤自動頂替失效硬盤,及時保證RAID系統(tǒng)的冗余性
?
全局式:備用硬盤為系統(tǒng)中所有的冗余RAID組共享
?
專用式:備用硬盤為系統(tǒng)中某一組冗余RAID組專用
?
熱插拔:HotSwap
?
定義:在不影響系統(tǒng)正常運轉(zhuǎn)的情況下,用正常的硬盤物理替換RAID系統(tǒng)中失效硬盤
?
關(guān)鍵在于熱插拔時電子器件的保護機制

九. 磁盤陣列RAID實戰(zhàn)

1. 由于使用Linux操作系統(tǒng)模擬的軟RAID,所以需要在虛擬機上添加多塊硬盤。

直接在虛擬機中添加即可。

2. 同時我們還需要知道創(chuàng)建軟RAID使用什么命令。mdadm,如果沒有,直接yum進行安裝即可

[root@qls ~]# yum install mdadm -y

3. mdadm磁盤陣列命令選項

PS: 
1、我們做硬件RAID,是在裝系統(tǒng)前還是之后?  
 前
2、raid5需要3塊硬盤,那么使用4塊硬盤,可以做raid5嗎?
 可以  n-1/n
?
Linux內(nèi)核中有一個md模塊在底層管理RAID設(shè)備,它會在應(yīng)用層給我們提供一個管理軟RAID的應(yīng)用工具mdadm
?
mdadm命令常見選項解釋:
?
-A  #激活磁盤陣列
-C  #建立一個新陣列
-D  #打印陣列設(shè)備的信息
-G  #改變陣列大小或形態(tài)
-S  #停止陣列
-r  #移除設(shè)備
-l  #設(shè)定磁盤陣列的級別
-n  #指定陣列磁盤的數(shù)量
-x  #指定陣列中備用盤的數(shù)量
-f  #將設(shè)備狀態(tài)定為故障
-a  #添加設(shè)備到陣列
-v   #顯示詳細信息軟RAID:通過操作系統(tǒng)實現(xiàn)</pre>

4. 實驗環(huán)境:

Raid種類 磁盤 熱備盤
Raid0 sdb、sdc
Raid1 sdd、sde sdf
Raid5 sdg、sdh、sdi sdj
Raid10 分區(qū):sdk1,sdk2,sdk3.sdk4
[root@qls ~]# 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 </pre>

RAID0

創(chuàng)建RAID0實驗環(huán)境:

Raid種類 磁盤 熱備盤
Raid0 sdb、sdc
1、創(chuàng)建Raid0
[root@qls ~]# mdadm  -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc
2、查看陣列信息
[root@qls ~]# mdadm -Ds  #找到丟失的信息。
[root@qls ~]# mdadm -D /dev/md0
3、生成配置文件
[root@qls ~]# mdadm -Ds > /etc/mdadm.conf
4、對創(chuàng)建的RAID0進行文件系統(tǒng)創(chuàng)建并掛載
[root@qls ~]# mkfs.xfs /dev/md0p1
[root@qls ~]# mkdir /raid0
[root@qls ~]# mount /dev/md0p1 /raid0/
[root@qls ~]#  df -Th /raid0/
5、開機自動掛載
[root@qls ~]#

RAID1

創(chuàng)建RAID0實驗環(huán)境:

Raid種類 磁盤 熱備盤
Raid1 sdd、sde sdf
1)創(chuàng)建RAID1,并添加1個熱備盤
2)模擬磁盤故障,看備用盤是否會自動頂替故障盤
3)從raid1中移出故障盤
1、創(chuàng)建RAID1
[root@qls ~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[d,e,f]
[root@qls ~]# mdadm  -Dsv > /etc/mdadm.conf
2、查看RAID陣列信息
[root@qls ~]# mdadm  -D /dev/md1
3、在RAID設(shè)備上創(chuàng)建文件系統(tǒng)
[root@qls ~]# mkfs.xfs /dev/md1
[root@qls ~]# mkdir /raid1
[root@qls ~]# mount /dev/md1  /raid1/
[root@qls ~]# cp /etc/passwd /raid1/
4、下面模擬RAID1中數(shù)據(jù)盤/dev/sde出現(xiàn)故障,觀察/dev/sdf備用盤能否自動頂替故障盤
[root@qls ~]# mdadm  /dev/md1 -f  /dev/sde
5、查看一下陣列狀態(tài)信息
[root@qls ~]# 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  #熱備盤已經(jīng)在同步數(shù)據(jù)
1       8      112        -    faulty   /dev/sdh
6、查看數(shù)據(jù)是否丟失
[root@qls ~]# ls /raid1/    #數(shù)據(jù)正常,沒有丟失
7、移除損壞的設(shè)備:
[root@qls ~]# mdadm  -r /dev/md1 /dev/sde
8、檢查是否還存在熱備盤
[root@qls ~]# 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@qls ~]# mdadm  -a /dev/md1  /dev/sde
**RAID5**

創(chuàng)建RAID5實驗環(huán)境:

Raid種類 磁盤 熱備盤
Raid5 sdg、sdh、sdi sdj
1)使用三塊盤創(chuàng)建RAID5, 使用-x添加1個熱備盤
2)模擬損壞一塊磁盤,然后備用盤自動頂上,只能頂一次
3)在模擬損壞,檢測數(shù)據(jù)是否丟失,如果沒有再次模擬損壞.
1、創(chuàng)建RAID5陣列,添加一塊備用盤
[root@qls ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 /dev/sd{g,h,i,j}
2、格式化RAID5,并掛載使用
[root@qls ~]# mkfs.xfs /dev/md5
[root@qls ~]# mkdir /raid5
[root@qls ~]# mount /dev/md5 /raid5/
3、檢查RAID詳情
[root@qls ~]# mdadm -D /dev/md5
4、模擬一塊磁盤損壞
[root@qls ~]# mdadm -f /dev/md5 /dev/sdj
5 、檢查備用盤是否頂上
[root@qls ~]# mdadm -D /dev/md5 
6 、在模擬一塊磁盤損壞
[root@qls ~]# mdadm -f /dev/md5 /dev/sdh
......持續(xù)此步驟進行驗證

RAID10
創(chuàng)建RAID10實驗環(huán)境:

Raid種類 磁盤 熱備盤
Raid10 分區(qū):sdk1,sdk2,sdk3.sdk4
1、分4個主分區(qū),每個分區(qū)1G大小
[root@qls ~]# fdisk  /dev/sdk
2、簡單測試是否能成功創(chuàng)建RAID10
[root@qls ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sdk[1-4]
3、查看RAID詳情
[root@qls ~]# mdadm  -D /dev/md10
4、格式化并掛載
[root@qls ~]# mkfs.xfs  /dev/md10
[root@qls ~]# mkdir  /raid10
[root@qls ~]# mount /dev/md10 /raid10
[root@qls ~]# cp /etc/services  /raid10
5、模擬一塊磁盤損壞
[root@qls ~]# mdadm  -f /dev/md10 /dev/sdk2</pre>

總結(jié)
PS:重啟后RAID將全部失效。如果希望永久生效,請將RAID信息寫入/etc/mdadm.conf配置文件,同時還需要將掛載信息寫入/etc/fstab文件中。
如果想實現(xiàn)的同學(xué)們可自行百度。當然你肯定有疑惑為什么不講,因為RAID生產(chǎn)根本不用,所以我們只是看看效果,如果你不想練習(xí)也anyway?但是RAID的概念面試的時候是必問,你的明白我意思?

十. 邏輯卷LVM概述

1. 什么是LVM?
LVM是Logical Volume Manager (邏輯卷管理)的簡寫,它是Linux環(huán)境下對磁盤分區(qū)進行管理的一種機制。又譯為邏輯卷宗管理器、邏輯扇區(qū)管理器、邏輯磁盤管理器,是Linux核心所提供的邏輯卷管理(Logical volume management)功能。它在硬盤的分區(qū)之上,又創(chuàng)建一個邏輯層,以方便系統(tǒng)管理硬盤分區(qū)系統(tǒng)。
最先由IBM開發(fā),在AIX系統(tǒng)上實現(xiàn),OS/2 操作系統(tǒng)與 HP-UX也支持這個功能。在1998年,Heinz Mauelshagen 根據(jù)在 HP-UX 上的邏輯卷管理器,寫作出第一個 Linux 版本的邏輯卷管理器。
2. LVM解決了什么問題
當我們剛開始安裝Linux操作系統(tǒng)是遇到的一個常見的難以決定的問題就是如何正確地評估各分區(qū)大小,以分配合適的硬盤空間。
普通的磁盤分區(qū)好之后就無法改變其大小,而遇到出現(xiàn)某個分區(qū)空間耗盡時,解決的方法可以是符號鏈接,或者調(diào)整分區(qū)大小的工具,但這只是暫時解決方法,沒有從根本上解決問題。
隨著Linux的邏輯卷管理功能的出現(xiàn),這些問題都迎刃而解,用戶可以在無需停機的請款下可以方便的調(diào)整各個分區(qū)大小。
3. LVM架構(gòu)圖


04. LVM基本概念
物理卷(PV):(physical volume),把常規(guī)的磁盤設(shè)備通過pvcreate命令對其進行初始化,形成了物理卷。其實就是硬盤或分區(qū)。(面粉)
卷組(VG):(volume group),把多個物理卷組成一個邏輯的整體,這樣卷組的大小就是多個硬盤之和?;蛘呃斫饩褪怯梢粋€或多個PV組成的整體。(面團)
邏輯卷(LV):(logical volume),從卷組中劃分需要的空間大小出來。用戶僅需對其格式化然后即可掛載使用。從VG中切割出的空間用于創(chuàng)建文件系統(tǒng)。(切成饅頭)
基本單元(PE):(physical extend),分配的邏輯大小的最小單元,默認為4MB的基本塊。(假設(shè)分配100MB邏輯空間,則需要創(chuàng)建25個PE)

十一. 邏輯卷LVM實踐

01.邏輯卷實踐
1)創(chuàng)建物理卷,將普通磁盤轉(zhuǎn)換為物理卷。
2)創(chuàng)建卷組,將物理卷加入到卷組中。
3)在卷組中劃分邏輯卷,然后掛載使用。
1. 準備物理磁盤,如果是虛擬機需要關(guān)閉添加磁盤,以便更好的實驗

[root@qls ~]# lsblk 
sdb               8:16   0   20G  0 disk  
sdc               8:32   0   20G  0 disk

2. 將磁盤轉(zhuǎn)換為物理卷

#下載安裝軟件包
[root@qls ~]# yum install -y lvm2
[root@qls ~]# pvcreate /dev/sdb

3. 將/dev/sdb物理卷加入卷組(資源池)-->名字lvm_test

[root@qls ~]# vgcreate lvm_test /dev/sdb
#檢查卷組
[root@qls ~]# vgs

4. 創(chuàng)建邏輯卷,分配名稱,以及大小,指定卷組

選項:
 -L  #邏輯卷大小
 -n  #邏輯卷名字
[root@qls ~]# lvcreate -L 100M -n lv1 lvm_test  ##將lvm_test分配給lv1

5. 格式化邏輯卷

[root@qls ~]# mkfs.xfs /dev/lvm_test/lv1

6. 掛載使用

[root@qls ~]# mkdir /lv1
[root@qls ~]# mount /dev/lvm_test/lv1 /lv1/
[root@qls ~]# cp /etc/services  /lv1/

2. 卷組管理,如何擴展卷組大小,如何刪除卷組
1. 如何擴大VG卷組

1.新硬盤加入pv
[root@qls ~]# 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@qls ~]# vgextend lvm_test /dev/sdc
Volume group "lvm_test" successfully extended
4.再次檢查,發(fā)現(xiàn)卷組已經(jīng)擴大
[root@oldboyedu ~]# vgs
VG               #PV #LV #SN Attr   VSize   VFree
lvm_test             2   1   0 wz--n-   1.99g 1.89g

2. 假設(shè)想移除/dev/sdb磁盤,建議先將sdb磁盤數(shù)據(jù)先遷移到sdc磁盤,然后在移除。(同一卷組的磁盤才可以進行在線遷移),(注意卷組的名稱---)

1.檢查當前邏輯卷VG中PV使用情況
[root@qls ~]# 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在線數(shù)據(jù)遷移,將sdb的數(shù)據(jù)遷移至sdc 
[root@qls ~]# pvmove /dev/sdb
 /dev/sdb: Moved: 100.00%
3.檢查是否將sdb數(shù)據(jù)遷移至sdc 
[root@qls ~]# 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@qls ~]# vgreduce lvm_test /dev/sdb
 Removed "/dev/sdb" from volume group "lvm_test"

3. 邏輯卷管理,動態(tài)的調(diào)整邏輯卷大小

1. 邏輯卷的擴展,是取決于vg卷中是否還有剩余的容量,注意擴展邏輯卷不能超過卷組VG的總大小

[root@qls ~]# vgs
VG               #PV #LV #SN Attr   VSize    VFree
datavg             1   1   0 wz--n- 1020.00m 920.00m
?
#1.擴展lv邏輯卷,增加800M分配給邏輯卷 {注意: 800M +800M 不一樣}
[root@qls ~]# lvextend -L +800M /dev/lvm_test/lv1
?
#或者可以選擇分配磁盤池中多少百分比給邏輯卷
[root@qls ~]# lvextend -l +50%FREE /dev/lvm_test/lv1
?
#2.擴展邏輯卷后需要更新fs文件系統(tǒng)
[root@qls ~]# xfs_growfs /dev/lvm_testvg/lv1    #xfs文件格式擴容

02. 縮小邏輯卷,不要去操作,因為線上在使用的磁盤真的敢操作嗎?

03. 刪除邏輯卷,如果不想使用邏輯卷可以選擇刪除。

[root@qls ~]# umount /dev/lvm_test/lv1
?
[root@qls ~]# 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</pre>
> 注意:LVM如果有一個磁盤損壞,整個lvm都壞了, lvm只有動態(tài)擴展作用,底層用RAID + 上層LVM = 既有冗余又有動態(tài)擴展

十二. 磁盤常見故障

1. 磁盤block滿故障

#環(huán)境準備,先創(chuàng)建一個2G大小的分區(qū)
?
[root@qls ~]# lsblk  /dev/sdb1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb1   8:17   0   2G  0 part /data
?
[root@qls ~]# df -h |grep sdb1
/dev/sdb1       2.0G   33M  2.0G   2% /data
?
#準備一個大文件,發(fā)現(xiàn)分區(qū)已經(jīng)報錯“No space left on device”
?
[root@qls ~]# 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
?
#再次在該分區(qū)下面添加新文件,已經(jīng)提示報錯。
?
[root@qls ~]# 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@qls ~]# du -sh /* |grep G
?
#再依次向下查找,直到找到大文件為止。
?
[root@qls ~]# du -sh /data/* |grep  G
2.0G  /data/test.txt
?
#找到文件之后,首先要確認好之后再刪除,不要直接的去刪除
?
[root@qls ~]# rm -f /data/test.txt 
[root@qls ~]# df -h |grep sdb1
/dev/sdb1       2.0G   35M  2.0G   2% /data</pre>

注意:如果該文件存在硬鏈接,一定要把硬鏈接文件刪除。


2. 磁盤inode滿故障

#環(huán)境準備,創(chuàng)建一個30M的分區(qū)。
?
[root@qls ~]# df -h |grep sdb1
dev/sdb1        27M  1.6M   26M   6% /test
[root@qls ~]# lsblk |grep sdb1
└─sdb1   8:17   0   30M  0 part /test
?
#批量創(chuàng)建大量的小文件
?
[root@qls ~]# touch /test/data/file/{1..15360}.txt
?
#再去到該分區(qū)中創(chuàng)建新的文件就會報錯。
?
[root@qls ~]# touch /test/test.txt
touch: cannot touch ‘/test/test.txt’: No space left on device
?
#解決思路:查看磁盤分區(qū)使用情況,發(fā)現(xiàn)磁盤空間是正常的,再次查看inode,發(fā)現(xiàn)inode滿了。
?
[root@qls ~]# df -h |grep sdb1
/dev/sdb1        27M  9.7M   17M  37% /test
[root@qls ~]# df -i |grep sdb1
/dev/sdb1         15424 15424        0  100% /test
?
#怎樣找出大量的小文件呢?首先要找出大目錄(小文件過多,會導(dǎo)致目錄變大。)
?
[root@qls ~]# find /test  -type d -size +300k |xargs ls -lhd
?
#找到大量小文件之后,首先要確認好之后再刪除,不要直接的去刪除
?
[root@qls ~]# find /test/data/file/ -type f -delete
?
#檢查結(jié)果
?
[root@qls ~]# df -i |grep sdb1
/dev/sdb1         15424     5    15419    1% /test</pre>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

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

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