Linux磁碟管理

Linux小菜鸟發表於2024-11-22

磁碟管理

Linux哲學思想:Linux中一切皆檔案

所以對於硬體裝置來說,在Linux中也是以檔案的形式存在,裝置檔案

[root@kylin-xu ~]# ll /dev/sda*
brw-rw---- 1 root disk 8, 0 Nov 20 04:11 /dev/sda
brw-rw---- 1 root disk 8, 1 Nov 20 04:11 /dev/sda1
brw-rw---- 1 root disk 8, 2 Nov 20 04:11 /dev/sda2
				 主裝置號  次裝置號
[root@kylin-xu ~]# ll /dev/zero 
crw-rw-rw- 1 root root 1, 5 Nov 20 04:11 /dev/zero

主裝置號:標識裝置型別 major number

次裝置號:標識同一型別下的不同裝置 minor number

【1】、磁碟外部結構

磁碟分類:

固態硬碟: 內部是主機板和隨身碟類似

機械硬碟: 碟片 主軸 傳動手臂 做機械運動 類似 DVD

Nvme硬碟

PCI-E介面

大小分類:

3.5英寸 : 桌上型電腦

2.5英寸: 伺服器 筆記本

介面型別:

IDE介面 # 淘汰

SCSI介面 # 淘汰

SATA介面 # 桌上型電腦 筆記本

SAS介面 #企業伺服器標配

固態磁碟價格高,儲存少。有壽命。

機械磁碟價格低,儲存大。老不死。

固態速度比機械磁碟速度快

磁碟儲存大小和轉速:

企業標配SAS介面: 300G 600G 900G 轉速 每分鐘轉多少圈 5400轉 7200轉 10K 15K

轉速越快效能越好

儲存越大轉速越慢 1T 轉速最高10K 2T 4T 8T 20T

注意:速度不是由單純的介面型別決定,支援Nvme協議硬碟速度是最快的

【2】、磁碟陣列Raid

作用:
獲得更大的容量		 # 將多塊磁碟邏輯的組合成一塊磁碟
獲得更高的效能	     # 寫入伺服器 寫兩塊磁碟比寫一塊磁碟速度快
獲得更好的安全性    # 可以同時將資料寫入兩塊盤 一塊盤做備份

面試+筆試題

RAID級別 硬碟數量 可用容量 安全性 效能 使用場景
0 至少一塊 磁碟數量總和 不安全 讀寫最快 要求速度不要安全,例如資料庫從庫
1 只能2塊 磁碟數量的一半 可以壞一塊 寫慢,讀湊合 要求安全,速度一般的場景,例如系統盤
5 至少3塊 n-1塊 壞1塊 0和1的折中 業務流量較穩定的場景
10 至少4塊,2的倍數即可 一半 壞1半 讀寫速度快 高併發場景

【3】、磁碟分割槽

windows磁碟預設的是MBR格式

MBR格式最多支援4個主分割槽 C D E F

MBR格式支援3個主分支+1個擴充套件分割槽

Linux磁碟表示方法

sda   # 表示第一塊磁碟
    sda1 # 表示第一塊磁碟的第一個分割槽
    sda2 # 表示第一塊磁碟的第二個分割槽
sdb   # 表示第二塊磁碟
    sdb1 # 表示第2塊磁碟的第1個分割槽
    sdb5 # 表示第2塊磁碟的第1個邏輯分割槽

1、Linux中磁碟分割槽方式

1.系統分割槽
第一種分割槽: 標準分割槽   300G磁碟
/boot   200M    # 存放系統核心的位置 載入程式所在的位置
/		剩餘空間 # 存放系統

第二種分割槽: swap分割槽
/boot  200M
swap   2G       # 當記憶體空間不夠用時,臨時使用磁碟空間充當記憶體來使用 速度慢 解決OOM問題 記憶體溢位。
			    # linux記憶體如果達到最大限制,則自動殺死佔用最高記憶體的程序來讓系統正常執行
				# swap 對使用者的伺服器需要增加實體記憶體
		        # 比較著急,或者公司內部測試伺服器 自己使用的。
/     剩餘空間

第三種分割槽: 比較少
/boot  200M
swap   2G
/      50G    # 系統
/data  1.8T   # 資料分割槽

2、磁碟分割槽型別

MBR:4 primary parted or 3 primary parted + 1 extended parted + many logical parted

GPT: 128 primary parted

3、磁碟分割槽步驟

1.MBR格式  小於2T磁碟使用fdisk分割槽
2.GPT分割槽  大於2T磁碟使用parted分割槽

第一步:插入一塊20G SCSI型別硬碟
第二部:重啟 或者 透過命令列重新掃描SCSI匯流排來新增硬碟
echo '- - -' > /sys/class/scsi_host/host0/scan 
echo '- - -' > /sys/class/scsi_host/host1/scan 
echo '- - -' > /sys/class/scsi_host/host2/scan 
# 由於我們並不知道哪一個匯流排是,就都掃一遍就行

# 再Ubuntu系統中/sys/class/scsi_hosts/有許多匯流排,我們有兩種方式
root@xu-ubuntu:~# for i in `ls /sys/class/scsi_host/` ; do echo '- - -' > /sys/class/scsi_host/${i}/scan; done
# 找出SPI匯流排對應的 host,只掃描該 host
root@xu-ubuntu:~# grep mptspi /sys/class/scsi_host/host*/proc_name
/sys/class/scsi_host/host31/proc_name:mptspi
root@xu-ubuntu:~# echo '- - -' > /sys/class/scsi_host/host31/scan
第三部:磁碟分割槽  # fdisk建立分割槽
[root@kylin-xu ~]# fdisk  /dev/sdb
Command (m for help): m			  # 檢視選單

Help:
   d   delete a partition		  # 刪除一個分割槽  
   l   list known partition types # 顯示分割槽型別
   n   add a new partition		  # 建立新的分割槽
   p   print the partition table  # 輸出分好的分割槽表
   m   print this menu		      # 列印選單
   w   write table to disk and exit #儲存並且推出
   q   quit without saving changes	# 退出不儲存
Command (m for help): n   # 建立分割槽
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p  # 指定型別,預設是primary
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): +5G

Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): n   # 第二個分割槽
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
First sector (10487808-41943039, default 10487808): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (10487808-41943039, default 41943039): +10G

Created a new partition 2 of type 'Linux' and of size 10 GiB.

Command (m for help): d   # 刪除分割槽 
Partition number (1-4, default 4): 

Command (m for help): n  # 建立一個擴充套件分割槽 
Partition type
   p   primary (3 primary, 0 extended, 1 free)
   e   extended (container for logical partitions)
Select (default e): 

Using default response e.
Selected partition 4
First sector (33556480-41943039, default 33556480): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (33556480-41943039, default 41943039): 

Created a new partition 4 of type 'Extended' and of size 4 GiB.

Command (m for help): p   # 檢視建立的分割槽型別
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5fbfe031

Device     Boot    Start      End  Sectors Size Id Type
/dev/sdb1           2048 10487807 10485760   5G 83 Linux
/dev/sdb2       10487808 31459327 20971520  10G 83 Linux
/dev/sdb3       31459328 33556479  2097152   1G 83 Linux
/dev/sdb4       33556480 41943039  8386560   4G  5 Extended


Command (m for help): n  # 建立邏輯分割槽
All primary partitions are in use.
Adding logical partition 6
First sector (35657728-41943039, default 35657728): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (35657728-41943039, default 41943039): 

Created a new partition 6 of type 'Linux' and of size 3 GiB.


Command (m for help): w  # 儲存分割槽
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

[root@kylin-xu ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   59G  0 part 
  ├─klas-root   253:0    0 38.3G  0 lvm  /
  ├─klas-swap   253:1    0    2G  0 lvm  [SWAP]
  └─klas-backup 253:2    0 18.7G  0 lvm  /backup
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    5G  0 part 
├─sdb2            8:18   0   10G  0 part 
├─sdb3            8:19   0    1G  0 part 
├─sdb4            8:20   0    1K  0 part 
├─sdb5            8:21   0    1G  0 part 
└─sdb6            8:22   0    3G  0 part 
sr0              11:0    1  4.3G  0 rom 

# 如果我們使用分割槽完成後,使用lsblk檢視不到我們分割槽的內容,這是由於lsblk是檢視記憶體中的資訊,又可能我們分割槽完成後,記憶體沒有更新,這是我們需要手動重新整理下
[root@kylin-xu ~]# partprobe

非互動式建立分割槽

[root@kylin-xu ~]# echo -e 'p\nn\n\n+1G\np\n' | fdisk /dev/sdb
# \n 表示回車
# parted建立分割槽
(parted) mklabel gpt 		# 將磁碟型別修改為gpt格式
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

(parted) mkpart             	# 建立分割槽                                              
Partition name?  []? primary    # 分割槽的名稱  自定義叫啥都行                         
File system type?  [ext2]? xfs                                            
Start? 0                                                                  
End? 500G                                                                 
Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
Ignore/Cancel? I  
(parted) print   
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      17.4kB  500GB  500GB  xfs          primary

(parted) mkpart 
Partition name?  []? parimary                                             
File system type?  [ext2]? xfs                                            
Start? 500G                                                               
End? 1000G
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size   File system  Name      Flags
 1      17.4kB  500GB   500GB               primary
 2      500GB   1000GB  500GB  xfs          parimary

(parted) mkpart primary xfs 1000G  4000G    	# 非互動式分割槽                             
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
(parted) quit  # 退出parted分割槽

parted重要的子命令

help [COMMAND] # 列印選單幫助
mklabel,mktable LABEL-TYPE # 建立分割槽表型別
mkpart PART-TYPE [FS-TYPE] START END # 建立分割槽
print [devices|free|list,all|NUMBER] # 檢視分割槽表
quit # 退出
rm NUMBER # 刪除分割槽

第四步:格式化分割槽,在格式化分割槽之後就會出現UUID
[root@kylin-xu ~]# mkfs.xfs  /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1310720, 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
第五步:建立掛載點,掛載分割槽
[root@kylin-xu ~]# mkdir  /mnt/xfs
[root@kylin-xu ~]# mount /dev/sdb1 /mnt/xfs
[root@kylin-xu ~]# df -Th | grep /mnt/xfs
/dev/sdb1               xfs       5.0G   68M  5.0G   2% /mnt/xfs
第六步:寫入/etc/fstab,開機自動掛載
vim /etc/fstab
/dev/sdb1 /mnt/xfs xfs defaults 0 0


解除安裝分割槽
[root@kylin-xu xfs]# touch 123
[root@kylin-xu xfs]# cd
[root@kylin-xu ~]# umount /mnt/xfs 
[root@kylin-xu ~]# df -Th | grep /mnt/xfs
[root@kylin-xu ~]# ll /mnt/xfs
total 0
# 我們將分割槽解除安裝之後,我們建立的內容也會消失,
# 我們重新掛載上之後就又會出現
[root@kylin-xu ~]# mount /dev/sdb1 /mnt/xfs
[root@kylin-xu ~]# ll /mnt/xfs
total 0
-rw-r--r-- 1 root root 0 Nov 20 04:08 123

我們在表示logical parted時儘量不要使用路徑去表示,要使用UUID

4、Ubuntu中進行磁碟分割槽

# 新增磁碟
root@xu-ubuntu:~# for i in `ls /sys/class/scsi_host/` ; do echo '- - -' > /sys/class/scsi_host/${i}/scan; done
root@xu-ubuntu:~# fdisk  /dev/sdb -l
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

在Ubuntu中磁碟分割槽使用的是gpt分割槽

root@xu-ubuntu:~# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.8

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C4537E56-7D8E-4F18-916F-4C63377E3032
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 41942973 sectors (20.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +4G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C4537E56-7D8E-4F18-916F-4C63377E3032
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 33554365 sectors (16.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         8390655   4.0 GiB     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/sdb.
The operation has completed successfully.

# 格式化
mkfs

【4】、檔案系統

1、什麼是檔案系統

檔案系統是作業系統用於明確儲存裝置或分割槽上的檔案的方法和資料結構;即在儲存裝置上組織檔案的方法。

作業系統中負責管理和儲存檔案資訊的軟體結構稱為檔案管理系統,簡稱檔案系統。從系統角度來看,檔案系統是對檔案儲存裝置的空間進行組織和分配,負責檔案儲存並對存入的檔案進行保護和檢索的系統。具體地說,它負責為使用者建立檔案,存入、讀出、修改、轉儲檔案,控制檔案的存取,安全控制,日誌,壓縮,加密等。

檢視當前核心支援的檔案系統:

[root@kylin-xu ~]# ls /lib/modules/`uname -r`/kernel/fs
root@xu-ubuntu:~#  ls /lib/modules/`uname -r`/kernel/fs

系統支援的檔案系統並不全是可用的,檢視當前系統可用的檔案系統:

 cat /proc/filesystems

當前系統支援的檔案系統和當前系統可用的檔案系統是兩回事,modules 中的檔案系統在編譯時選擇了才是可用的,而可用的檔案系統包含了預設支援的檔案系統,如果需要使用某個檔案系統,而該檔案系統又不在proc 中,則需要重新編譯核心;

2、檔案系統型別

Linux 常用檔案系統

檔案系統 備註
ext2 Extended file system 適用於那些分割槽容量不是太大,更新也不頻繁的情況,例如/boot 分 區
ext3 ext2 的改進版本,其支援日誌功能,能夠幫助系統從非正常關機導致的異常中恢復
ext4 ext 檔案系統的最新版。有很多新的特性,包括納秒級時間戳、巨型檔案 (16TB)、最大1EB的檔案系統,以及速度的提升
xfs SGI,支援最大8EB的檔案系統
swap 交換分割槽專用的檔案系統
iso9660 光碟檔案系統

Windows 常用檔案系統

檔案系統 備註
FAT32 最多隻能支援16TB的檔案系統和4GB的檔案
NTFS 最多隻能支援16EB的檔案系統和16EB的檔案
extFAT

Unix*常用檔案系統

檔案系統 備註
FFS(fast)
UFS(unix) UFS是UNIX檔案系統的簡稱,幾乎是大部分UNIX類作業系統預設的基於磁碟的檔案系統
JF32

3、建立檔案系統

root@xu-ubuntu:~# mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 1048576 4k blocks and 262144 inodes   # 建立block和inode
Filesystem UUID: 83d410e3-5dcb-415a-8ef0-54c3d73e4b34   # 設定UUID
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@xu-ubuntu:~# mkfs.xfs  /dev/sdb2
meta-data=/dev/sdb2              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=1310720, 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


root@xu-ubuntu:~# lsblk  -f /dev/sdb
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sdb                                                                           
├─sdb1 ext4   1.0         83d410e3-5dcb-415a-8ef0-54c3d73e4b34                
├─sdb2 xfs                af832cf3-01c7-48eb-b4bc-a76605c7d5f6                
└─sdb3

【5】、磁碟掛載

 mount [-lhV]
 mount -a [options]
 mount [options] [--source] <source> | [--target] <directory>
 mount [options] <source> <directory>
 mount <operation> <mountpoint> [<target>]

device:指明要掛載的裝置

  • 裝置檔案:例如:/dev/sda5
  • 卷標:-L 'LABEL', 例如 -L 'MYDATA'
  • UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
  • 偽檔案系統名稱:proc, sysfs, devtmpfs, configfs

mountpoint:掛載點目錄必須事先存在,建議使用空目錄

掛載規則

  • 一個掛載點同一時間只能掛載一個裝置
  • 一個掛載點同一時間掛載了多個裝置,只能看到最後一個裝置的資料,其它裝置上的資料將被隱藏
  • 一個裝置可以同時掛載到多個掛載點
  • 通常掛載點一般是已存在空的目錄
root@xu-ubuntu:~# mount --source /dev/sdb1 -o ro /dir1
# --source 指定掛載源,-o 指定掛載選項  ro 表示只讀

root@xu-ubuntu:~# df -lh | grep  dir1
/dev/sdb1                          3.9G   24K  3.7G   1% /dir1
root@xu-ubuntu:~# touch /dir1/lll
touch: cannot touch '/dir1/lll': Read-only file system
root@xu-ubuntu:~# mount  | grep sdb1
/dev/sdb1 on /dir1 type ext4 (ro,relatime)

【6】、持久化掛載

/etc/fstab

每行定義一個要掛載的檔案系統,,其中包括共 6 項

  • 要掛載的裝置或偽檔案系統裝置檔案(LABEL=label | UUID=uuid | /dev/sda1)
  • 掛載點:必須是事先存在的目錄
  • 檔案系統型別:ext4,xfs,iso9660,nfs,none
  • 掛載選項:defaults ,acl,bind,ro,rw 等
  • 轉儲頻率:0 不做備份; 1 每天轉儲; 2 每隔一天轉儲
  • fsck檢查的檔案系統的順序:0 不自檢 ; 1 首先自檢,一般只有rootfs才用;2 非rootfs使用 0
/dev/sdb1    /mnt/xfs     xfs    defaults   0   0

【7】、磁碟常用工具

1、df

檔案系統檢視工具

-a:顯示所有
-h:以方便的形式顯示資料
-T:顯示檔案系統型別
-t:按照檔案系統型別過濾
root@xu-ubuntu:~# df -t ext4 
-l:只顯示本機的檔案系統
--total:最後一行彙總輸出
root@xu-ubuntu:~# df -lTh --total 
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  388M  1.6M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    24G  8.9G   14G  40% /
tmpfs                             tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   2.0G  242M  1.6G  14% /boot
tmpfs                             tmpfs  388M  4.0K  388M   1% /run/user/1000
/dev/sdb1                         ext4   3.9G   24K  3.7G   1% /dir1
total                             -       32G  9.2G   22G  31% -

2、du

目錄統計工具

-s:只顯示外層目錄
-h:以方便閱讀的格式顯示
--total:彙總統計到的所有資料
root@xu-ubuntu:~# du /etc/ -sh
6.7M    /etc/
root@xu-ubuntu:~# du /etc/  /var/log/ -sh --total 
6.7M    /etc/
36M     /var/log/
42M     total

3、dd

if=file				#從所命名檔案讀取而不是從標準輸入
of=file			    #寫到所命名的檔案而不是到標準輸出
bs=size				#指定塊大小(既是是ibs也是obs)
count=n				#複製幾個bs
# 備份MBR
root@xu-ubuntu:~# dd if=/dev/sdb of=./sdb.img bs=512 count=1

# 備份整個磁碟
dd if=/dev/sdx of=/path/to/image

【8】、磁碟相關案例

企業案例1:java環境記憶體不夠用,大量佔用swap

swap磁碟分割槽: 大小是記憶體的1-1.5倍 如果記憶體大於8G,則最多swap給8G即可。
什麼情況下使用swap: 
       測試伺服器 
       內部伺服器 
       自己用的虛擬機器 
       流量波動的業務。
線上伺服器,業務伺服器禁止使用swap,增加記憶體的方式解決OOM(記憶體溢位)問題。

如何建立swap

  • 方法1: 安裝作業系統的時候
  • 方法2: 安裝完成作業系統
# 生成一個1G的檔案
[root@kylin-xu ~]# dd if=/dev/zero  of=/1g bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 6.15619 s, 174 MB/s

# 格式化為swap
[root@kylin-xu ~]# mkswap  /1g 
mkswap: /1g: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=3cbda684-b958-476e-b08c-1b94834d0657
[root@kylin-xu ~]# blkid /1g
/1g: UUID="3cbda684-b958-476e-b08c-1b94834d0657" TYPE="swap"

# 掛載使用swap 直接增加到原有的swap空間上
[root@kylin-xu ~]# swapon /1g
swapon: /1g: insecure permissions 0644, 0600  suggested.
[root@kylin-xu ~]# swapon -s  # 檢視分割槽的組成
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2138108 13324   -2
/1g                                     file            1048572 0       -3
[root@kylin-xu ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       178Mi       1.1Gi        10Mi       697Mi       1.6Gi
Swap:         3.0Gi        13Mi       3.0Gi

# 寫入/etc/fstab

企業案例2.無法寫入檔案到磁碟

第一種情況:磁碟空間滿了
# 需要查詢系統中的大檔案,找出磁碟中大於1G的檔案。
# 注意mount 會隱藏原來目錄下的檔案
find / -size +1G -type f
dd if=/dev/zero of=/opt/2g bs=1M count=2000
[root@kylin-xu ~]# find / -type f -size  +1G
/proc/kcore
/opt/2g

第二種情況:inode號滿了,找出檔案中大量的小檔案
[root@kylin-xu ~]# find / -type d -size +1M 

企業案例3.解決磁碟不夠用的問題

需求: 目前磁碟不夠用

1.業務會持續輸出日誌內容到 /var/log/nginx.log檔案中 10G
[root@kylin-xu ~]# dd if=/dev/zero of=/var/log/10g bs=1M count=10000
2.日誌的路徑不能變,解決磁碟不夠用的問題。
解決方案:
1.增加大的磁碟
增加4T的磁碟
2.掛載磁碟到/data目錄
[root@kylin-xu ~]# mount /dev/sdc3 /data
3.將10g檔案移動到/data目錄
[root@kylin-xu ~]# mv /var/log/10g  /data/
[root@kylin-xu ~]# ll /data/
total 9.8G
-rw-r--r-- 1 root root 9.8G Nov 20 17:11 10g
[root@kylin-xu ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  963M     0  963M   0% /dev
tmpfs                   tmpfs     979M     0  979M   0% /dev/shm
tmpfs                   tmpfs     979M   22M  957M   3% /run
tmpfs                   tmpfs     979M     0  979M   0% /sys/fs/cgroup
/dev/mapper/klas-root   xfs        39G  6.7G   32G  18% /
tmpfs                   tmpfs     979M     0  979M   0% /tmp
/dev/sdb1               xfs       5.0G   68M  5.0G   2% /mnt/xfs
/dev/mapper/klas-backup xfs        19G  171M   19G   1% /backup
/dev/sda1               xfs      1014M  169M  846M  17% /boot
tmpfs                   tmpfs     196M     0  196M   0% /run/user/0
/dev/sdc3               xfs       2.8T   30G  2.7T   2% /data
4.軟連結到/var/log/10g
[root@kylin-xu ~]# ln -s /data/10g  /var/log/10g
[root@kylin-xu ~]# ll /var/log/10g 
lrwxrwxrwx 1 root root 9 Nov 20 17:15 /var/log/10g -> /data/10g

企業案例4.刪除檔案

磁碟上有個一39G的檔案,刪除後發現磁碟沒有釋放。
檔案如果被程序所佔用,會出現刪除檔案磁碟沒有釋放的問題。
檢視當前的檔案被哪個程序所佔用:
[root@oldboyedu ~]# lsof |grep 10g
tail      2873                          root    3r      REG               8,32 41838247936        132 /data/10 (deleted)

殺死程序或者重啟或者重新載入
[root@oldboyedu ~]# kill -9 2873

【9】、邏輯卷

1、什麼是邏輯卷

LVM: Logical Volume Manager 可以允許對捲進行方便操作的抽象層,包括重新設定檔案系統的大小,允許在多個物理裝置間重新組織檔案系統

LVM可以彈性的更改LVM的容量

實現過程

  • 將裝置指定為物理卷
  • 用一個或者多個物理捲來建立一個卷組,物理卷是用固定大小的物理區域(Physical Extent,PE)來定義的
  • 在物理捲上建立的邏輯卷, 是由物理區域(PE)組成
  • 可以在邏輯捲上建立檔案系統並掛載

2、建立邏輯卷

# 建立pvs
root@xu-ubuntu:~# pvcreate /dev/sdb{1..3}
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdb3" successfully created.
root@xu-ubuntu:~# pvs
  PV         VG        Fmt  Attr PSize   PFree  
  /dev/sda3  ubuntu-vg lvm2 a--  <48.00g  24.00g
  /dev/sdb1            lvm2 ---    4.00g   4.00g
  /dev/sdb2            lvm2 ---    5.00g   5.00g
  /dev/sdb3            lvm2 ---  <11.00g <11.00g
  
# 建立vg
root@xu-ubuntu:~# vgcreate vg1 /dev/sdb{1..2}
  Volume group "vg1" successfully created
root@xu-ubuntu:~# vgs
  VG        #PV #LV #SN Attr   VSize   VFree 
  ubuntu-vg   1   1   0 wz--n- <48.00g 24.00g
  vg1         2   0   0 wz--n-   8.99g  8.99g


# 建立lvm -L:指定邏輯卷大小  -n:指定邏輯卷名字   -l:按照PE數量進行劃分
root@xu-ubuntu:~# lvcreate -L 5G -n lv1 vg1
  Logical volume "lv1" created.
root@xu-ubuntu:~# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <24.00g                                                    
  lv1       vg1       -wi-a-----   5.00g  
  
root@xu-ubuntu:~# lvcreate -l 500 -n lv2 vg1
  Logical volume "lv2" created.
root@xu-ubuntu:~# lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <24.00g                                                    
  lv1       vg1       -wi-a-----   5.00g                                                    
  lv2       vg1       -wi-a-----   1.95g                                                    

我們後續如果想使用lvm,也需要進行格式化和掛載才可以

# 格式化和掛載
root@xu-ubuntu:~# mkfs.ext4 /dev/vg1/lv1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: ff6b294f-b30c-4ac2-94e9-cc57b086d207
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@xu-ubuntu:~# mount /dev/vg1/lv1 /lv1

2、對lvm進行擴容

# ext系列檔案系統
# 在擴容lvm之前我們得看下vg是否還有空間允許擴容,如果vg還有空間,我們直接擴容lvm即可。如果vg沒有空間,我們得先擴容vg,擴容vg需要新增pv,如果有空閒的pv直接擴容即可,沒有空閒的pv,先使用pvcreate建立出pv
root@xu-ubuntu:~# vgextend vg1  /dev/sdb3
  Volume group "vg1" successfully extended
root@xu-ubuntu:~# lvextend -L 7G /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from 5.00 GiB (1280 extents) to 7.00 GiB (1792 extents).
  Logical volume vg1/lv1 successfully resized.
root@xu-ubuntu:~# df -Th   # 擴容完成後我們還需要告知檔案系統,才能生效
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  388M  1.7M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    24G  8.9G   14G  40% /
tmpfs                             tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   2.0G  242M  1.6G  14% /boot
tmpfs                             tmpfs  388M  4.0K  388M   1% /run/user/1000
/dev/mapper/vg1-lv1               ext4   4.9G   24K  4.6G   1% /lv1
root@xu-ubuntu:~# resize2fs /dev/vg1/lv1    # 使用resize2fs告知ext系列檔案系統
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vg1/lv1 is mounted on /lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg1/lv1 is now 1835008 (4k) blocks long.

root@xu-ubuntu:~# resize2fs /dev/vg1/lv1 | grep lv1
resize2fs 1.46.5 (30-Dec-2021)
The filesystem is already 1835008 (4k) blocks long.  Nothing to do!

root@xu-ubuntu:~# df -Th | grep  lv1
/dev/mapper/vg1-lv1               ext4   6.9G   24K  6.5G   1% /lv1000000000000000000
# xfs型別檔案系統
# 其他過程都一樣,只是在告知檔案系統時的命令不同 xfs檔案系統使用的是 xfs_growfs
root@xu-ubuntu:~# lvextend -L 5G /dev/vg1/lv2
  Size of logical volume vg1/lv2 changed from 1.95 GiB (500 extents) to 5.00 GiB (1280 extents).
  Logical volume vg1/lv2 successfully resized.
root@xu-ubuntu:~# df -Th
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  388M  1.7M  386M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    24G  8.9G   14G  40% /
tmpfs                             tmpfs  1.9G     0  1.9G   0% /dev/shm
tmpfs                             tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/sda2                         ext4   2.0G  242M  1.6G  14% /boot
tmpfs                             tmpfs  388M  4.0K  388M   1% /run/user/1000
/dev/mapper/vg1-lv1               ext4   6.9G   24K  6.5G   1% /lv1
/dev/mapper/vg1-lv2               xfs    2.0G   47M  1.9G   3% /lv2
root@xu-ubuntu:~# xfs_growfs /dev/vg1/lv2
meta-data=/dev/mapper/vg1-lv2    isize=512    agcount=4, agsize=128000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=512000, 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
data blocks changed from 512000 to 1310720
root@xu-ubuntu:~# df -Th | grep lv2
/dev/mapper/vg1-lv2               xfs    5.0G   69M  5.0G   2% /lv2

相關文章