Linux磁盤管理 1.磁盤的基本概念 什么是磁盤
每個硬盤中心都是一摞高速運轉的圓盤,在圓盤上附著的一圈金屬顆粒,每個金屬顆粒都有自己的磁化程度,用于儲存0和1。
當記錄數據時,硬盤的磁頭開始通電,形成強磁場,數據在磁場的作用下轉變成電流,使顆粒磁化,從而將信息記錄在圓盤上。
由海量顆粒組成的信息,就是我們存在硬盤里的數據.
2.磁盤的基本結構
(柱面:處于同一個垂直區域的磁道稱為 柱面 ,即各盤面上面相同位置磁道的集合)
每一個扇區固定512字節,第一個扇區001,也稱之為MBR扇區 466B的MBR 64B的分區表 2B固定的表結尾 55AA
前4個扇區稱之為超級塊 2048字節
1.什么是盤片?
硬盤一般有一個或多個盤片,每個盤片可以有兩面,即第一個盤片的正面為0面,反面為1面然后依次類推。
2.什么是磁道?
每個盤片的盤面在出廠的時候被劃分出了多個同心圓環,數據就存儲在這樣的同心圓環上面,我們將這樣的圓環稱為磁道(Track),每個盤面可以劃分多個磁道。但肉眼不可見。
3.什么是扇區?
在硬盤出廠時會對磁盤進行一次低格,其實就是再每個磁道劃分為若干個弧段,每個弧段就是一個扇區(Sector)。扇區是硬盤上存儲的物理單位,現在每個扇區可存儲512字節數據已經成了業界的約定。
4.什么是柱面?
柱面實際上就是我們抽象出來的一個邏輯概念,簡單來說就是處于同一個垂直區域的磁道稱為 柱面 ,即各盤面上面相同位置磁道的集合。這樣數據如果存儲到相同半徑磁道上的同一扇區,這樣可以實現并行讀取,主要是減少磁頭尋道時間。
5.什么是磁頭?
讀取磁盤磁道上面金屬塊,主要負責讀或寫入數據。
3.磁盤的預備知識 1.磁盤的接口類型
IDE , Scsi (已經被淘汰) , SATA |||與SAS (企業使用較多)
2.磁盤的基本術語
尺寸: 2.5英寸 3.5英寸
容量:KB MB GB TB PB EB
轉速:500 15000
IOPS:每秒能夠發生IO的次數
3.磁盤在系統上的命名方式
linux磁盤的命名規則
dev/[接口類型][磁盤序號][分區序號]
接口類型 ? sd 物理磁盤 ? vd 虛擬磁盤 ? 序號有 ? a-z [第1塊-第26塊]
分區序號有 1-n 1-4為主分區 4-n 邏輯分區
設備名稱 分區信息 設備類型
/dev/sda /dev/sda1 第一塊物理硬盤的第一個分區
/dev/sdb /dev/sdb2 第二塊物理硬盤的第二個分區
/dev/vdd /dev/vdd4 第四塊虛擬磁盤的第四個分區
PS1:系統中分區由數字編號表示,1~4留給主分區使用和擴展分區,邏輯分區從5開始,為什么分區還有限制?不應該是隨意分配?因為MBR分區表只能分配4個主分區?why?
MBR為什么只能劃分4個主分區?
PS2: 前面我們已經提到過MBR分區表只能分配4個主分區,但現在還有一種新型的分區表GPT,GPT支持分配128個主分區。注意MBR與GPT之間不能互轉,會導致數據丟失。
MBR與GPT之間又有什么區別?
4.磁盤分區工具fdisk
案例.添加一塊小于2TB的磁盤進行使用,步驟如下:
1)給虛擬機添加一塊新的硬盤 2)查看磁盤情況
fdisk-l 或 lsblk (推薦) df -Th
NAME ? ? ? ? ? MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda ? ? ? ? ? ? ? 8:0 ? ?0 ? 20G ?0 disk ├─sda1 ? ? ? ? ? ?8:1 ? ?0 ? 1G ?0 part /boot └─sda2 ? ? ? ? ? ?8:2 ? ?0 ? 19G ?0 part ├─centos-root 253:0 ? ?0 ? 17G ?0 lvm / └─centos-swap 253:1 ? ?0 ? 2G ?0 lvm [SWAP] sdb ? ? ? ? ? ? ? 8:16 ? 0 ? 20G ?0 disk sdc ? ? ? ? ? ? ? 8:32 ? 0 ? 5G ?0 disk sdd ? ? ? ? ? ? ? 8:48 ? 0 ? 5G ?0 disk sde ? ? ? ? ? ? ? 8:64 ? 0 ? 5G ?0 disk sdf ? ? ? ? ? ? ? 8:80 ? 0 ? 5G ?0 disk sr0 ? ? ? ? ? ? ?11:0 ? ?1 ?4.5G ?0 rom ? 注釋:NAME 磁盤的設備名,在/dev/ MAJ:MIN 磁盤的系統描述 SIZE 磁盤或分區大小 TYPE 類型 disk 磁盤 part 分區 rom 只讀存儲器 ram 隨機存儲器 MOUNTPOINT 掛載點(訪問目錄路徑)
2)使用fdisk進行分區
fdisk和gdisk的區別:fidsk:fdisk只能用于MBR分區,最大限制磁盤容量 2T gdisk:是fdisk的升級版,主要使用的是GPT分區類型,用來劃分容量大于2T的硬盤 用法一樣,但是gdisk需要安裝 [root@caiwendi ~]# yum install -y gdisk 安裝gdisk分區工具 -y 免交互
PS: 生產分區建議,如無特殊需求直接使用整個磁盤即可,無需分區.
# fdisk -l # 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) ? ? ? #拓展功能
擴展:分區類型編號
5 擴展分區 82 swap分區 83 常規分區 8e 動態分區
1.fdisk創建主分區
fdisk /dev/sdb n 新增一個分區 p 主分區號 回車 默認創建第一個主分區 回車 再默認扇區回車 +5G 分配5G大小
P 顯示分區表的信息
2.fdisk創建擴展分區
3.fdisk創建邏輯分區
4.fdisk查看分區情況,并保存
P 顯示分區表的信息
3)使用mkfs進行格式化
格式化工具 ? mkfs 格式化分區 ? mkswap 格式化交換分區
mkfs -t ext4 設備名 mkfs.ext4 設備名 mkfs -t xfs 設備名 mkfs.xfs 設備名 mkswap 設備名
ext4和xfs的區別: ext4:單個文件的大小,ext4可以是16GB到16TB,最大文件系統大小,ext4可以是1EB,ext4受限制于磁盤結構和兼容問題,可擴展性不如xfs xfs:單個文件的大小,XFS可以是16TB到16EB,最大文件系統大小,xfs是8EB
格式化分區
mkfs格式化磁盤,實質創建文件系統,文件系統類似于將房子裝修成3室一廳,還是2室一廳。
選項: # -b 設定數據區塊占用空間大小,目前支持1024、2048、4096 bytes每個塊。 # -t 用來指定什么類型的文件系統,可以是ext4, xfs # -i 設定inode的大小 # -N 設定inode數量,防止Inode數量不夠導致磁盤不足 1.格式化整個磁盤 # mkfs.ext4 /dev/sdb 2.格式化磁盤的某個分區 # mkfs.xfs /dev/sdb1
案例:
1)/dev/sdb1、/dev/sdb2是xfs文件系統
mkfs -t xfs /dev/sdb1 mkfs.xfs /dev/sdb2
2)/dev/sdb3、/dev/sdb6、/dev/sdb7是ext4文件系統
mkfs -t ext4 /dev/sdb3 mkfs.ext4 /dev/sdb6mkfs.ext4 /dev/sdb7
3)/dev/sdb5是swap文件系統
mkswap /dev/sdb5
4)使用mount進行掛載
我們只是對磁盤進行了分區格式化,但是你看不到的,你必須要掛載到文件夾下 它才能使用。
如果需要使用改磁盤的空間,需要準備一個空的目錄作為掛載點,與該設備進行關聯。
mount主要是為文件系統指定一個訪問入口。
1.通過mount進行掛載,但重啟將會失效,我們稱為臨時生效
mount [選項] 設備名 掛載目錄
-t 指定文件系統掛載分區 ? -a 讀取/etc/fstab文件里所有內容,并按照格式實現掛載 ? -o 指定掛載參數, remount ? 重新掛載的參數 umount ? -l 強制卸載
-a 掛載/etc/fstab中的配置文件 -o 指定掛載參數
mkdir /data ? 創建目錄 /data mount /dev/sdb1 /data/ ? 掛載/dev/sdb1至/data目錄
2.掛載的磁盤,如果不想使用可以使用umount進行卸載#選項: -l 強制卸載
1.卸載目錄方式
[root@server ~]# umount /data
2.卸載設備方式
[root@server ~]# umount /dev/sdb1
3.umount不能卸載的情況
[root@server 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'選項強制卸載 [root@server db1]# umount -l /db1
3.如果需要實現永久掛載則需要將掛載信息寫入/etc/fstab配置文件中實現。(通過blkid 查看他的uuid 寫入/etc/fstab文件內)
blkid 命令:可以查看塊設備(包括交換分區)的文件系統類型、LABEL、UUID、掛載目錄等信息
1.使用blkid命令獲取各設備的UUID [root@server ~]# blkid |grep "sdb1" /dev/sdb1: UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" TYPE="xfs" ? 2.使用UUID掛載磁盤sdb1分區至于db1, 測試掛載 [root@server ~]# mount UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" /db1 ? 3.寫入/etc/fstab中,實現開機自動掛載 [root@server ~]# tail -1 /etc/fstab UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /db1 xfs defaults 0 0 ? 4.加載fstab配置文件, 同時檢測語法是否有錯誤 [root@server ~]# mount –a
5)虛擬磁盤 swap
Swap分區在系統的物理內存不夠時,將硬盤空間中的一部分空間釋放出來,以供當前運行的程序使用。
PS: 當物理內存不夠時會隨機kill占用內存的進程,從而產生oom,臨時使用swap可以解決。
(1)創建分區,并格式化為swap分區
# fdisk /dev/sdb ? #分1個G大小 # mkswap /dev/sdb1 #格式化為swap
(2)查看當前swap分區大小,然后進行擴展和縮小
查看當前swap分區大?。╩em 內存 swap 虛擬磁盤) #free -m ? ? total ? used ? free ? shared buff/cache available Mem: 1980 ? 1475 ? ? 80 ? ? ?10 ? ? ? ? 424 ? ? ? 242 Swap: 2047 ? ?4 ? ? ?2043 ? swapon 設備名 開啟swap分區 swapoff 設備名 關閉swap分區 1.擴展swap分區大小 # swapon /dev/sdb2 ? 開啟swap分區 # free -m ? ? total ? used ? free ? shared buff/cache available Mem: ?1980 ? 1475 ? ? 80 ? ? ?10 ? ? ? ? 424 ? ? ? 242 Swap: 3047 ? ? 4 ? ? ?2043 # swapon -a #代表激活所有的swap ? 2.縮小swap分區大小 # swapoff /dev/sdb1 ? 關閉swap分區 # free -m? ? total ? used ? free ? shared buff/cache available Mem: 1980 ? 1475 ? ? 80 ? ? ?10 ? ? ? ? 424 ? ? ? 242 Swap: 2047 ? ?4 ? ? ?2043 # swapoff -a #代表關閉所有的swap
3.檢查當前swap分區有哪些設備
#swapon -s 文件名 ? ? ? ? 類型 ? ? 大小 ? 已用 權限 /dev/dm-1 partition 2097148 4616 ? -2 /dev/sdb1 partition 1048572 ? 0 ? ?-2
4.如果磁盤沒過多的分區可用,也可以通過文件增加SWAP空間,本質上還是磁盤
# dd if=/dev/zero of=/opt/swap_file bs=1M count=500 # chmod 0600 /opt/swap_file # mkswap -f /opt/swap_file # swapon /opt/swap_file # free -m
5.案例 企業案例1:
當前服務器的/home需要單獨定義一個分區,如何實現 sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP]
首先一定要進行備份,將文件放置備份目錄后,對home目錄進行掛載,在對/home*目錄進行還原*(把文件進行備份,新建一個目錄,把文件備份到目錄中 通過mount進行掛載,把/dev/sdb1掛載至/home目錄下。然后再還原源數據。/bak目錄下面的文件還原至/home目錄下。實際bak目錄沒有用,bak目錄是起中轉作用。bak目錄是一個媒介。) 1.先將home目錄內的文件備份至/bak
mkdir /bak 創建目錄/bak touch {01..10}.txt 在home目錄下創建01到10文件
mv /home/* /bak 把home下的所有文件備份至/bak目錄下
2.掛載給他一個分區 /dev/sdb1 mount /dev/sdb1 /home 掛載/dev/sdb1至/home目錄
3.將數據內容還原至/home目錄下
mv /bak/* /home 把/bak目錄下面的文件還原至/home目錄下
企業案例2:
當前服務器的/data分區空間不夠用了,需要本地擴容 比如按上述案例的分區,原先/data分區在/dev/sdb2,空間不夠,需要本地擴容 實現思路: 1.先對/data目錄下的內容進行備份至/bak,增加一塊磁盤重新給他1.分區2.格式化3.掛載 (擴容就是新增一個磁盤,重新分配空間 把新增的磁盤進行分區、格式化、掛載。創建一個新目錄data,把data里面的文件備份至bak目錄下。新增一個磁盤,對磁盤進行分區,格式化,掛載。把新增的磁盤掛載到新創建的目錄 data下。再把原文件 bak下面的文件還原至新建目錄 data目錄下。)
資源準備 1./data分區在/dev/sdb2 mkdir -p /data 創建目錄 /data mount /dev/sdb2 /data 把/dev/sdb2 掛載至/data目錄下 touch /data/file{1..10}.txt 在/data目錄下創建文件1到10.txt
操作過程 1.對data目錄進行備份 mv /data/* /bak 把目錄/data下的所有文件移動至/bak目錄下
新增一塊磁盤,將他分區、格式化、再進行掛載 fdisk /dev/sdc 使用fdisk命令對/dev/sdc進行分區 mkfs.xfs /dev/sdc1 格式化 /dev/sdc1 mount /dev/sdc1 /data4 把/dev/sdc1掛載至/data目錄下
.將/data目錄下元數據放回去
mv /bak/* /data 把/bak目錄下面的文件還原至/data目錄下
企業案例3:
虛擬內存擴容 最好的方案: 1.增加一個2G左右的分區 2.mkswap格式化 3.swapon生效
臨時解決方案: 1.使用dd生成一個臨時文件 (使用dd在下創建一個2G的文件) dd if=/dev/zero of=/tmp/ bs=2G count=1
2.格式化 (使用mkswap格式化文件) mkswap /tmp/
3.開啟 (開啟swap分區) chmod 600 /tmp/ swapon /tmp/
永久掛載 將內容寫入/etc/fstab /dev/mapper/centos-root / xfs 0 0 UUID=-d59e-450e-bf11- /boot xfs 0 0 /dev/mapper/centos-swap swap swap 0 0 UUID="-01e1-4098-bc84-" /test2 xfs 0 0
設備uuid 掛載到的目錄 磁盤的格式 掛載參數 自動備份默認 0 開機檢查 默認0
查看uuid命令是 blkid /dev/sdb1 [root@ ~]# blkid /dev/sdb1 /dev/sdb1: UUID="-7a6b-4fa6-bbbb-" TYPE="xfs"
一條命令寫入永久掛載/etc/fstab echo $(blkid /dev/sdb1|awk '{print $2}') /test1 xfs 0 0 >> /etc/fstab
6.磁盤的操作:三步走
一、分區
查詢
fdisk -l
lsblk
df -Th
free -m
分區
fdisk
gdisk
刷新
二、格式化
mkfs
mkfs.ext4
mkfs.xfs
mkswap
三、掛載
臨時
mount
-a 讀取/etc/fstab文件里所有內容,并按照格式實現掛載
-o 指定掛載參數,
重新掛載的參數 remount
umount
-l 強制卸載
swapon
swapoff
blkid (查看掛載目錄)
永久
/etc/fstab配置格式