磁碟管理
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