04 磁碟儲存和檔案系統

szlhwei發表於2024-06-27

目錄
  • 1 裝置檢視lsblk/df
          • 範例:特殊裝置 null/zero/random
  • 2 RAID磁碟陣列
  • 3 管理儲存
    • 3.1 第一步fdisk建立磁碟分割槽
    • 3.2 第二步mkfs建立檔案系統
    • 3.3 第三步mount掛載使用
    • 3.4 swap交換分割槽
    • 3.7 磁碟常見工具df/du/dd
  • 4 邏輯卷管理LVM
          • 範例:建立邏輯卷並彈性擴容

1 裝置檢視lsblk/df

##lsblk顯示所有塊裝置,專注於顯示物理磁碟及其分割槽
[root@anolis-31 ~]$lsblk
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
  ├─ao-root 252:0    0   17G  0 lvm  /
  └─ao-swap 252:1    0    2G  0 lvm  [SWAP]
sr0          11:0    1  2.6G  0 rom

##df專注於顯示已掛載檔案系統的磁碟空間使用情況
[root@anolis-31 ~]$df
檔案系統               1K-塊    已用     可用 已用% 掛載點
devtmpfs              973364       0   973364    0% /dev
tmpfs                 992956       0   992956    0% /dev/shm
tmpfs                 992956    8824   984132    1% /run
tmpfs                 992956       0   992956    0% /sys/fs/cgroup
/dev/mapper/ao-root 17811456 2721208 15090248   16% /
/dev/sda1            1038336  207608   830728   20% /boot
tmpfs                 198588       0   198588    0% /run/user/0

##裝置目錄
[root@anolis-31 ~]$ll /dev/ | wc -l
162

範例:特殊裝置 null/zero/random
##/dev/null,空裝置
##任何寫入到/dev/null的資料都會消失,不會儲存在磁碟上,也不會佔用任何儲存空間

##如指令碼中將ping日誌丟棄,就不列印
ping -c1 -w1 ${net}.${id} &> /dev/null && echo ${net}.${id} is up || echo ${net}.${id} is down

##如清空檔案內容
[root@anolis-31 ~]$cat /dev/null > fstab_1.txt


##/dev/zero,零位元組裝置
##提供無限個零位元組的裝置檔案,它總是返回零,是建立佔位檔案或記憶體填充的理想工具。
[root@anolis-31 ~]$dd if=/dev/zero of=file.txt bs=1M count=10


##/dev/random、/dev/urandom,隨機數裝置
##提供加密質量隨機數的裝置檔案。它們常被用於需要高度隨機性的場景,如生成加密金鑰等。
##random更安全,urandom更快。
##獲取6位字母數字的隨機數
[root@anolis-31 ~]$cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 6
HeK8db

2 RAID磁碟陣列

機械硬碟HDD
固態硬碟SSD

相較於HDD ,SSD在防震抗摔、傳輸速率、功耗、重量、噪音上有明顯優勢,  SSD傳輸速率效能是HDD 的2倍
相較於SSD , HDD在價格、容量佔有絕對優勢
硬碟有價,資料無價,目前SSD不能完全取代HHD 機械硬碟結構
RAID:磁碟冗餘陣列(Redundant Array of Inexpensive Disks),簡稱磁碟陣列。

RAID功能實現
  提高IO能力,磁碟並行讀寫
  提高耐用性,磁碟冗餘演算法來實現
 
常見組合:
 RAID0:讀寫並行,速度快;無冗餘無容錯,一個磁碟壞都壞;
 RAID1:讀快,寫兩次較慢;有冗餘,成本高;
 RAID5:讀寫效能提升,有校驗位,允許最多1快磁碟損壞;
 RAID1+0:先做1,再做0;每組映象最多壞一塊;
image-20240627093742468 image-20240627093407491 image-20240627093508033 image-20240627093519083

3 管理儲存

3.1 第一步fdisk建立磁碟分割槽

兩種分割槽方式: MBR ,GPT
MBR:最多4主分割槽,分割槽不超過2T 劃分分割槽的單位。
GPT:支援128個分割槽,還能更好地管理大磁碟空間。

BIOS+MBR與UEFI+GPT,主機板程式與分割槽搭配

##查詢分割槽類別,dos用MBR管理工具fdisk,gpt用GPT管理工具gdisk
[root@rocky-41 ~]#fdisk -l | grep -C2 -e "dos" -e  "gpt"
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x06a2ab88

[root@ubuntu51 ~]#fdisk -l | grep -C2 -e "dos" -e  "gpt"
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:gpt
磁碟識別符號:1F452381-AD24-4210-936F-D545FABB6454
##新加磁碟後,需要掃描,否則lsblk看不到
##觸發系統重新掃描SCSI匯流排,執行echo "- - -">/sys/class/scsi_host/host0/scan將會觸發對指定SCSI主機的重新掃描

[root@anolis-31 ~]$for i in {1..10};do echo "- - -">/sys/class/scsi_host/host$i/scan;done

##掃描完後,新增sdb磁碟
[root@anolis-31 ~]$lsblk
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
  ├─ao-root 252:0    0   17G  0 lvm  /
  └─ao-swap 252:1    0    2G  0 lvm  [SWAP]
sdb           8:16   0   10G  0 disk
sr0          11:0    1  2.6G  0 rom
##手動建立
[root@anolis-31 ~]$fdisk /dev/sdb
[root@anolis-31 ~]$lsblk
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
  ├─ao-root 252:0    0   17G  0 lvm  /
  └─ao-swap 252:1    0    2G  0 lvm  [SWAP]
sdb           8:16   0   10G  0 disk
├─sdb1        8:17   0    2G  0 part
└─sdb2        8:18   0    1G  0 part
sr0          11:0    1  2.6G  0 rom

##非互動式建立
##1、n,建立;2、p,主分割槽;3、預設分割槽號;4、從上次分割槽結束的位置開始;5、大小設定,+1G,1G大小;6、w,報錯退出;
[root@anolis-31 ~]$echo -e 'n\np\n\n\n+1G\nw\n' | fdisk /dev/sdb &>/dev/null
[root@anolis-31 ~]$lsblk
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
  ├─ao-root 252:0    0   17G  0 lvm  /
  └─ao-swap 252:1    0    2G  0 lvm  [SWAP]
sdb           8:16   0   10G  0 disk
├─sdb1        8:17   0    2G  0 part
├─sdb2        8:18   0    1G  0 part
└─sdb3        8:19   0    1G  0 part
sr0          11:0    1  2.6G  0 rom

##注意檢視裝置型別,後續需要8e的邏輯卷LVM型別,方便擴容
##可手動fdisk /dev/sdb時修改,也可以記住選項(t修改)後使用非互動
[root@anolis-31 ~]$fdisk -l
裝置       啟動    起點    末尾    扇區 大小 Id 型別
/dev/sdb1          2048 4196351 4194304   2G 8e Linux LVM
/dev/sdb2       4196352 6293503 2097152   1G 82 Linux swap / Solaris
/dev/sdb3       6293504 8390655 2097152   1G 83 Linux

3.2 第二步mkfs建立檔案系統

常用檔案系統
ext4:提供了很多新的特性,包括納秒級時間戳、建立和使用巨型檔案 (16TB)、最大1EB的檔案系統,以及速度的提升
xfs :SGI,支援最大8EB的檔案系統 
swap
##檢視紅帽系列預設xfs檔案系統,ubuntu是ext4檔案系統
[root@anolis-31 ~]$df -T | awk  '/^\/dev\//{print $1,$2}'
/dev/mapper/ao-root xfs
/dev/sda1 xfs

[root@rocky-41 ~]$df -T | awk  '/^\/dev\//{print $1,$2}'
/dev/mapper/rl-root xfs
/dev/sda1 xfs

[root@ubuntu51 ~]#df -T | awk  '/^\/dev\//{print $1,$2}'
/dev/mapper/ubuntu--vg-ubuntu--lv ext4
/dev/sda2 ext4
[root@anolis-31 ~]$mkfs.xfs /dev/sdb1

3.3 第三步mount掛載使用

##臨時掛載,掛載完才能看到
[root@anolis-31 ~]$mount /dev/sdb1 /data/new_sdb/
[root@anolis-31 ~]$df -T | awk  '/^\/dev\//{print $1,$2,$NF}'
/dev/mapper/ao-root xfs /
/dev/sda1 xfs /boot
/dev/sdb1 xfs /data/new_sdb

##臨時取消,umount取消掛載
[root@anolis-31 ~]$umount /data/new_sdb
[root@anolis-31 ~]$df -T | awk  '/^\/dev\//{print $1,$2,$NF}'
/dev/mapper/ao-root xfs /
/dev/sda1 xfs /boot

##持久操作,需要修改檔案/etc/fstab
##1uuid:blkid能查到
##2掛載點:先建立空目錄
##3檔案系統:ext4、xfs
##4掛載選項:defaults,acl,bind對應修改
##5轉儲頻率:對應修改
##6fsck檢查的順序:對應修改
[root@anolis-31 ~]$grep '^[^#]'  /etc/fstab
/dev/mapper/ao-root     /                       xfs     defaults  0 0
UUID=3bf09b78-243f-4327-941e-8914b0f9e255 /boot                   xfs    defaults        0 0
/dev/mapper/ao-swap     none                    swap    defaults  0 0

##檢視uuid
[root@anolis-31 ~]$blkid | grep sdb1
/dev/sdb1: UUID="3bef38ce-7f00-4000-bfc4-b59a0656f1c1" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="5d0caad6-01"

##對應修改,新增到檔案內
[root@anolis-31 ~]$cat >>/etc/fstab<<EOF
> UUID=3bef38ce-7f00-4000-bfc4-b59a0656f1c1 /dev/sdb1 xfs defaults 0 0
> EOF
##生效
[root@anolis-31 ~]$mount -a

3.4 swap交換分割槽

swap交換分割槽是系統RAM的補充,swap分割槽支援虛擬記憶體。
注意:為最佳化效能,可以將swap分佈存放,或高效能磁碟存放

*系統中的* *RAM* *量* *推薦的* *swap* *空間* *允許休眠的建議* *swap* *空間大小*
低於 2 GB RAM 量的2倍數 RAM 容量的三倍
2 GB - 8 GB 等於 RAM 量 RAM 量的倍數
8 GB - 64 GB 4 GB 到 RAM 容量的 0.5 倍 RAM 容量的 1.5 倍
超過 64 GB 獨立負載(至少 4GB) 不建議使用休眠功能
##新增10G磁碟
##掃描
[root@rocky-41 ~]$for i in {1..40};do echo "- - -">/sys/class/scsi_host/host$i/scan;done
[root@rocky-41 ~]$lsblk
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
  ├─rl-root 253:0    0   17G  0 lvm  /
  └─rl-swap 253:1    0    2G  0 lvm  [SWAP]
sdb           8:16   0   10G  0 disk
sr0          11:0    1  2.4G  0 rom

##建立82型別swap分割槽並寫入配置
[root@rocky-41 ~]$echo -e 'n\np\n\n\n+2G\nt\n82\nw\n' | fdisk /dev/sdb
[root@rocky-41 ~]$mkswap /dev/sdb1
正在設定交換空間版本 1,大小 = 2 GiB (2147479552  個位元組)
無標籤,UUID=c8ff66e3-acaf-49f3-9e97-8496ad20cc2b
[root@rocky-41 ~]$blkid /dev/sdb1
/dev/sdb1: UUID="c8ff66e3-acaf-49f3-9e97-8496ad20cc2b" TYPE="swap" PARTUUID="423e6950-01"
[root@rocky-41 ~]$cat >>/etc/fstab <<EOF
> UUID=c8ff66e3-acaf-49f3-9e97-8496ad20cc2b swap swap defaults 0 0
> EOF

##啟用所有的交換分割槽,驗證
[root@rocky-41 ~]$swapon -a
[root@rocky-41 ~]$free -h
              total        used        free      shared  buff/cache   available
Mem:          1.7Gi       568Mi       103Mi       6.0Mi       1.0Gi       988Mi
Swap:         4.0Gi       195Mi       3.8Gi

[root@rocky-41 ~]$cat /proc/swaps
Filename				Type		Size		Used		Priority
/dev/dm-1                               partition	2097148		199720		-2
/dev/sdb1                               partition	2097148		0		-3


##關閉swap分割槽,因為交換分割槽效能不足,有可能需要關閉
##配置檔案swap註釋,關閉swap
[root@rocky-41 ~]$sed -i.bak -E '/swap/s/(.*)/#\1/' /etc/fstab
[root@rocky-41 ~]$swapoff -a
[root@rocky-41 ~]$free -h
              total        used        free      shared  buff/cache   available
Mem:          1.7Gi       617Mi        98Mi       9.0Mi       1.0Gi       938Mi
Swap:            0B          0B          0B
[root@rocky-41 ~]$cat /proc/swaps
Filename				Type		Size		Used		Priority


##設定swap的使用策略
##0禁止使用,100總是使用,越低則降低使用,修改後驗證
[root@rocky-41 ~]$echo vm.swappiness=10 >> /etc/sysctl.conf
[root@rocky-41 ~]$sysctl -p
vm.swappiness = 10
[root@rocky-41 ~]$sysctl -a | grep vm.swappiness
vm.swappiness = 10

3.7 磁碟常見工具df/du/dd

##df檔案系統空間
##-T型別;-h容量human-readable單位;
[root@rocky-41 ~]$df -Th
檔案系統            型別      容量  已用  可用 已用% 掛載點
devtmpfs            devtmpfs  848M     0  848M    0% /dev
tmpfs               tmpfs     868M     0  868M    0% /dev/shm
tmpfs               tmpfs     868M  8.7M  859M    1% /run
tmpfs               tmpfs     868M     0  868M    0% /sys/fs/cgroup
/dev/mapper/rl-root xfs        17G  9.3G  7.8G   55% /
/dev/sda1           xfs      1014M  198M  817M   20% /boot
tmpfs               tmpfs     174M     0  174M    0% /run/user/0


##du目錄總體空間
##-h:容量human-read;--max-depth:最大目錄層級;
[root@rocky-41 /]$du -h   --max-depth=0 /var
541M	/var


##dd 讀取、轉換並輸出資料
##dd if=/PATH/FROM/SRC of=/PATH/TO/DEST  bs=# count=#
#測試硬碟寫速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
#測試硬碟讀速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null

4 邏輯卷管理LVM

image-20240627124630567
##軟體包lvm2
LVM:可以允許對捲進行方便操作的抽象層
物理卷:Physical Volume,PV
	物理塊:Physical Extent,PE
卷組:Volume Group,VG
邏輯卷:Logical Volume,LV

實現過程
1、將裝置指定為物理卷(PV),PV=n個PE(PE為物理塊,相當於自定義的基本單位,預設4M);相當於分解;
2、卷組(VG),VG=n個PV;相當於合併資源池;
3、邏輯卷(LV),建立在VG上,可以建立檔案系統;相當於在資源池取資源使用;
 
pv管理工具:
pv資訊顯示:pvs;pvdisplay
pvcreate /dev/DEVICE
pvremove /dev/DEVICE

vg管理工具:
vg顯示資訊:vgs;vgdisplay
vgcreate -s 16M vg0 /dev/sdb /dev/sdc  #指定PE的大小 ,預設4M
vgextend	VolumeGroupName	PhysicalDevicePath  #擴充套件
vgremove

lv管理工具:
lv顯示資訊:lvs;lvdisplay
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvcreate -l 100%FREE -n yourlv testvg
lvremove /dev/VG_NAME/LV_NAME

lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME  #擴容
範例:建立邏輯卷並彈性擴容
##即使空間足夠也不縮容,有可能造成資料丟失

##目標:/data/lv_test 彈性擴容
##實現初始使用分割槽sdb2的1G,後續增加1G;空間不夠時,再使用分割槽sdb3的空間再增加2G;

##建立後的分割槽
[root@rocky-41 ~]$fdisk -l /dev/sdb
Disk /dev/sdb:10 GiB,10737418240 位元組,20971520 個扇區
單元:扇區 / 1 * 512 = 512 位元組
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x423e6950

裝置       啟動    起點     末尾    扇區 大小 Id 型別
/dev/sdb1          2048  4196351 4194304   2G 82 Linux swap / Solaris
/dev/sdb2       4196352  8390655 4194304   2G 8e Linux LVM
/dev/sdb3       8390656 14682111 6291456   3G 8e Linux LVM

##建立pv
[root@rocky-41 ~]$pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
[root@rocky-41 ~]$pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
[root@rocky-41 ~]$pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/sda2  rl lvm2 a--  <19.00g    0
  /dev/sdb2     lvm2 ---    2.00g 2.00g
  /dev/sdb3     lvm2 ---    3.00g 3.00g

##建立vg
[root@rocky-41 ~]$vgcreate -s 16M vg0 /dev/sdb2
  Volume group "vg0" successfully created
[root@rocky-41 ~]$vgs
  VG  #PV #LV #SN Attr   VSize   VFree
  rl    1   2   0 wz--n- <19.00g    0
  vg0   1   0   0 wz--n-   1.98g 1.98g

##建立lv
[root@rocky-41 ~]$lvcreate -L 1G -n lv1 vg0
  Logical volume "lv1" created.
[root@rocky-41 ~]$lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rl  -wi-ao---- <17.00g
  swap rl  -wi-a-----   2.00g
  lv1  vg0 -wi-a-----   1.00g
  
##建立檔案系統並臨時掛載,檢視容量
[root@rocky-41 ~]$mkfs.xfs /dev/vg0/lv1
[root@rocky-41 ~]$mount /dev/vg0/lv1 /data/lv_test/
[root@rocky-41 ~]$df -h
檔案系統             容量  已用  可用 已用% 掛載點
/dev/mapper/vg0-lv1 1014M   40M  975M    4% /data/lv_test

##擴容,vg已無空間
[root@rocky-41 ~]$lvresize -r -l +100%FREE /dev/vg0/lv1
[root@rocky-41 ~]$df -h
檔案系統             容量  已用  可用 已用% 掛載點
/dev/mapper/vg0-lv1  2.0G   47M  2.0G    3% /data/lv_test
[root@rocky-41 ~]$vgs
  VG  #PV #LV #SN Attr   VSize   VFree
  rl    1   2   0 wz--n- <19.00g    0
  vg0   1   1   0 wz--n-   1.98g    0

##建立新pv,加入到vg0
[root@rocky-41 ~]$pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
[root@rocky-41 ~]$vgextend vg0 /dev/sdb3
  Volume group "vg0" successfully extended
[root@rocky-41 ~]$vgs
  VG  #PV #LV #SN Attr   VSize   VFree
  rl    1   2   0 wz--n- <19.00g    0
  vg0   2   1   0 wz--n-  <4.97g 2.98g

##擴容,增加2G
[root@rocky-41 ~]$lvresize -r -L +2G /dev/vg0/lv1
[root@rocky-41 ~]$df -h
檔案系統             容量  已用  可用 已用% 掛載點
/dev/mapper/vg0-lv1  4.0G   62M  4.0G    2% /data/lv_test

相關文章