?前言:本博客僅作記錄學習使用,部分圖片出自網絡,如有侵犯您的權益,請聯系刪除
目錄
一、一切從“/”開始
二、物理設備的命名規則
三、文件系統與數據資料
四、掛載硬件設備
五、添加硬盤設備
六、添加交換分區
七、磁盤容量配額
八、VDO虛擬數據優化
九、軟硬方式鏈接
致謝
一、一切從“/”開始
在Linux系統中,目錄、字符設備、套接字、硬盤、光驅、打印機等都會被抽象成文件形式,即“Linux系統中一切都是文件”。Linux系統中一切的文件都是從“根(/)”目錄開始的,并按照文件系統層次化標準(FHS:Filesystem Hierarchy Standard)采用倒樹狀結構來存放文件,以及定義了常見目錄的用途。
目錄名稱 | 應放置文件的內容 |
---|---|
/boot | 開機所需文件—內核、開機菜單記憶所需配置文件 |
/dev | 以文件形式存放任何設備與接口 |
/etc | 配置文件 |
/home | 用戶主目錄 |
/bin | 存放單用戶 模式下還可以操作的命令 |
/lib | 開機時用到的函數庫,以及/bin與/sbin下面的命令要調用的函數 |
/sbin | 開機過程中需要的命令 |
/media | 用于掛載設備文件的目錄 |
/opt | 放置第三方的軟件 |
/root | 系統管理員的家目錄 |
/srv | 一些網絡服務的數據文件目錄 |
/tmp | 任何人均可使用的“共享”臨時目錄 |
/proc | 虛擬文件系統,例如系統內核、進程、外部設備及網絡狀態等 |
/usr/local | 用戶自行安裝的軟件 |
/usr/sbin | Linux系統開機時不會使用到的軟件/命令/腳本 |
/usr/share | 幫助與說明文件,也可放置共享文件 |
/var | 主要存放經常變化的文件,如日志 |
/lost+found | 當文件系統發生錯誤時,將一些丟失的文件片段放在這里 |
Linux系統中還有一個重要的概念—路徑:絕對路徑、相對路徑
二、物理設備的命名規則
系統內核中的udev設備管理器會自動把硬件名稱規范起來;udev設備管理器的服務會一直以守護進程的形式運行并偵聽內核發出來的信號來管理/dev目錄下的設備文件;常見硬件設備及文件名稱:
硬件設備 | 文件名稱 |
---|---|
IDE設備 | /dev/hd[a-d] |
SCSI/SATA/U盤 | /dev/sd[a-z] |
virtio設備 | /dev/vd[a-z] |
軟驅 | /dev/fd[0-1] |
打印機 | /dev/lp[0-15] |
光驅 | /dev/cdrom |
鼠標 | /dev/mouse |
磁帶機 | /dev/st0或/dev/ht0 |
由于現在的IDE設備已經很少見了,所以一般的硬盤設備都會是以“/dev/sd”開頭的。而一臺主機上可以有多塊硬盤,因此系統采用a~z來代表24塊不同的硬盤(默認從a開始分配),而且硬盤的分區編號也有講究:
- 主分區或擴展分區的編號從1開始,到4結束
-
邏輯分區從編號5開始
硬盤設備是由大量的扇區組成的,每個扇區的容量為512字節。其中第一個扇區最重要,它里面保存著主引導記錄與分區表信息。就第一個扇區來講,主引導記錄需要占用446字節,分區表為64字節,結束符占用2字符;其中分區表中每記錄一個分區信息就需要16字節,這樣一來最多只有4個分區信息可以寫到第一個扇區中,這4個分區就是4個主分區。
為了解決分區不夠的問題,可以將第一個扇區的分區表中16字節(原本要寫入主分區信息)的空間(稱為擴展分區)拿出來指向另外一個分區。也就是說,擴展分區其實并不是一個真正的分區,而更像是一個占用16字節分區表空間的指針—一個指向另外一個分區的指針。這樣,用戶一般會選擇使用3個分區加1個擴展分區,然后在擴展分區中創建數個邏輯分區,從而滿足多分區(大于4個)的需求。規劃:
三、文件系統與數據資料
用戶在硬件存儲設備中執行的文件建立、寫入、讀取、修改、轉存與控制等操作都是依靠文件系統來完成的。文件系統的作用是合理規劃硬盤,以保證用戶正常的使用需求
Linux系統最常見的文件系統如下:
- Ext2:最早追溯到1993年,是Linux系統第一個商業級文件系統,基本沿襲的是Unix文件系統的設計標準。但由于不包含讀寫日志功能,數據丟失可能性很大,能不用就不用,頂多建議用于SD存儲卡或U盤
- Ext3:一款日志文件系統,把整個硬盤的每個寫入動作的細節都預先記錄下來,然后再實際操作,以便在發生異常宕機后能夠回溯追蹤到被中斷的部分。Ext3能夠在系統異常宕機時避免文件系統資料丟失,并能自動修復數據的不一致與錯誤。
- Ext4:Ext3的改進版本,作為RHEL 6系統中的默認文件管理系統,它支持的存儲容量高達1EB(1EB=1,073,741,824GB),且能夠有無限多的目錄。能夠批量分配block塊,極大提高讀寫效率。
- XFS:一種高性能的日志文件系統,而且是RHEL 7/8中默認的文件管理系統,它的優勢在發生意外宕機后尤其明顯,即可以快速地恢復可能被破壞的文件,而且強大的日志功能只用花費極低的計算和存儲性能。并且它最大可支持的存儲容量為18EB。
RHEL 7/8系統中一個比較大的變化是使用了XFS作為文件系統,這不同于RHEL 6使用的Ext4.
在拿到了一塊新的硬盤存儲設備后,先需要分區,然后再格式化文件系統,最后才能掛載并正常使用。硬盤的分區操作取決于您的需求和硬盤大小;也可以選擇不進行分區,但必須對硬盤進行格式化處理。
(就像拿到了一張未裁剪的完整紙張,首先要進行裁剪以方便使用(分區),接下來在裁切后的紙張上畫格以便能書寫工整(格式化),最后是正式的使用(掛載))
為了使用戶在讀取或寫入文件時不用關心底層的硬盤結構,Linux內核中的軟件層為用戶程序提供了一個VFS(Virtual File System)接口,這樣用戶實際上在操作文件時就是統一對這個虛擬文件系統進行操作了。
四、掛載硬件設備
1、mount命令
mount命令用于掛載文件系統,語法:“mount 文件系統 掛載目錄”。掛載是在使用硬件設備前所執行的最后一步操作。只需使用mount命令把硬盤設備或分區與一個目錄文件進行關聯,然后就能在這個目錄中看到硬件設備中的數據了。-a參數會在執行后自動檢查/etc/fstab文件中有無疏漏被掛載的設備文件,如果有,則進行自動掛載操作。mount參數如下:
參數 | 作用 |
---|---|
-a | 掛載所有在/etc/fstab中定義的文件系統 |
-t | 指定文件系統的類型 |
示例:要把設備/dev/sdb2掛載到/backup目錄,只需要在mount命令中填寫設備與掛載目錄參數,系統會自動判斷要掛載文件的類型:
?[root@linuxprobe ~]# mount /dev/sdb2 /backup
2、blkid命令
blkid命令用于顯示設備的屬性信息,語法:“blkid [設備名]”
如果在工作中要掛載的是一塊網絡存儲設備,名字可能會變來變去,這時推薦使用UUID(通用唯一標識碼)進行掛載操作,這是一串用于標識每塊獨立硬盤的字符串,具有唯一性及穩定性,特別適合掛載網絡設備時使用
?[root@linuxprobe ~]# blkid/dev/sda1: UUID="388c3bda-5f06-4efe-9f02-0b5dd5ade2c3" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="1d2352b2-01"/dev/sda2: UUID="GFbkIx-6yrE-v4eM-QP8z-DC8s-1DLd-3cnGRC" TYPE="LVM2_member" PARTUUID="1d2352b2-02"?[root@linuxprobe ~]# mount UUID=388c3bda-5f06-4efe-9f02-0b5dd5ade2c3 /backup
按照上面操作執行后就能立即使用文件系統了,但系統在重啟后掛載就會失效,也就是需要每次開機后都手動掛載一下。如果想要讓硬件設備和目錄永久地進行自動關聯,就必須把掛載信息按照指定的填寫格式“設備文件 掛載目錄 格式類型 權限選項 是否備份 是否自檢”寫入到/etc/fstab文件中。這個文件中包含著掛載所需的諸多信息項目,一旦配置好后就能一勞永逸了。填寫格式各字段表示意義:
字段 | 意義 |
---|---|
設備文件 | 一般為設備的路徑+設備名稱,也可以寫唯一標識碼(UUID) |
掛載目錄 | 指定要掛載到的目錄,需在掛載前創建好 |
格式類型 | 指定文件系統的格式,比如Ext3、Ext4、、XFS、SWAP、iso9660(此為光盤設備) |
權限選項 | 若設置為defaults,則默認權限為:rw、suid、dev、exec、auto、nouser、async |
是否備份 | 若是1則開機后使用dump進行磁盤備份,為0則不備份 |
是否自檢 | 若是1則開機后自動進行磁盤自檢,為0則不自檢 |
示例:將文件系統為ext4的硬件設備/dev/sdb2在開機后自動掛載到/backup目錄上,并保持默認權限且無需開機自檢,就需要在/etc/fstab文件中寫入下面的信息,這樣重啟后會自動掛載:
?[root@linuxprobe ~]# vim /etc/fstab# # /etc/fstab# Created by anaconda on Wed Mar 13 14:29:02 2024## Accessible filesystems, by reference, are maintained under '/dev/disk/'.# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.## After editing this file, run 'systemctl daemon-reload' to update systemd# units generated from this file.#/dev/mapper/rhel-root ? / ? ? ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0UUID=388c3bda-5f06-4efe-9f02-0b5dd5ade2c3 /boot ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0#/dev/mapper/rhel-swap ? none ? ? ? ? ? ? ? ? ? swap ? defaults ? ? ? 0 0/dev/sdb2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /backup ext4 defaults 0 0
由于后面需要使用系統鏡像制作Yum/DNF軟件倉庫,所以提前把光盤設備掛載到/media/cdrom目錄中。光盤設備的文件系統格式是iso9660:
?[root@linuxprobe ~]# vim /etc/fstab# # /etc/fstab# Created by anaconda on Wed Mar 13 14:29:02 2024## Accessible filesystems, by reference, are maintained under '/dev/disk/'.# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.## After editing this file, run 'systemctl daemon-reload' to update systemd# units generated from this file.#/dev/mapper/rhel-root ? / ? ? ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0UUID=388c3bda-5f06-4efe-9f02-0b5dd5ade2c3 /boot ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0#/dev/mapper/rhel-swap ? none ? ? ? ? ? ? ? ? ? swap ? defaults ? ? ? 0 0/dev/sdb2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /backup ext4 defaults 0 0/dev/cdrom /media/cdrom iso9660 defualts 0 0
寫入到/etc/fstab文件中的設備信息不會立即生效,使用mount -a參數進行自動掛載:
?[root@linuxprobe ~]# mount -a
3、df命令
df命令用于查看已掛載的磁盤空間使用情況,語法:“df -h”
df命令不僅能列出系統中正在被使用的設備有哪些,還可以使用-h參數便捷的對存儲容量進行“進位”操作,例如遇到10240k的時候會自動進位寫成10M,便于閱讀:
?[root@linuxprobe ~]# df -hFilesystem ? ? ? ? ? ? Size Used Avail Use% Mounted ondevtmpfs ? ? ? ? ? ? ? 4.7G ? ? 0 4.7G ? 0% /devtmpfs ? ? ? ? ? ? ? ? 4.7G ? ? 0 4.7G ? 0% /dev/shmtmpfs ? ? ? ? ? ? ? ? 4.7G 9.6M 4.7G ? 1% /runtmpfs ? ? ? ? ? ? ? ? 4.7G ? ? 0 4.7G ? 0% /sys/fs/cgroup/dev/mapper/rhel-root ? 35G 7.2G ? 28G 21% //dev/sdb ? ? ? ? ? ? ? 10G 104M 9.9G ? 2% /app/dev/loop0 ? ? ? ? ? ? 13G ? 13G ? ? 0 100% /mnt/dev/sda1 ? ? ? ? ? ? 1014M 273M 742M 27% /boottmpfs ? ? ? ? ? ? ? ? 952M ? 12K 952M ? 1% /run/user/42tmpfs ? ? ? ? ? ? ? ? 952M 4.0K 952M ? 1% /run/user/0
對于網絡存儲設備,建議加上_netdev參數。系統會等待聯網成功后再嘗試掛載這塊網絡存儲設備,避免了開機時間過長或失敗的情況
?[root@linuxprobe ~]# vim /etc/fstab.../dev/mapper/rhel-root ? / ? ? ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0UUID=388c3bda-5f06-4efe-9f02-0b5dd5ade2c3 /boot ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0#/dev/mapper/rhel-swap ? none ? ? ? ? ? ? ? ? ? swap ? defaults ? ? ? 0 0/dev/sdb2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /backup ext4 defaults,_netdev ?0 0/dev/cdrom /media/cdrom iso9660 defualts 0 0
掛載文件系統的目的是為了使用硬件資源,而卸載文件系統就意味著不再使用硬件的設備資源;相對應的,掛載操作就是把硬件設備與目錄兩者進行關聯的動作,因此卸載操作只需要說明想要取消關聯的設備文件或掛載目錄的其中一項即可
4、umount命令
umount命令用于卸載設備或文件系統,語法:“umount [設備文件/掛載目錄]”
?[root@linuxprobe ~]# umount /dev/sdb2
如果處在設備所掛載的目錄時,系統會提示該設備繁忙,這種情況只需要退出到其他目錄再嘗試一次就可以了
[root@linuxprobe ~]# cd /media/cdrom
[root@linuxprobe cdrom]# umount /dev/cdrom
umount: /media/cdrom: target is busy.
[root@linuxprobe cdrom]# cd ~
[root@linuxprobe ~]# umount /dev/cdrom
[root@linuxprobe ~]#
5、lsblk命令
lsblk命令用于掛載的磁盤空間使用情況
[root@linuxprobe ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 12.6G 1 loop /mnt
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part ├─rhel-root 253:0 0 35G 0 lvm /└─rhel-swap 253:1 0 4G 0 lvm
sdb 8:16 0 10G 0 disk /app
sr0 11:0 1 12.6G 0 rom
五、添加硬盤設備
思路:在虛擬機中模擬添加一塊新的硬盤存儲設備、然后進行分區、格式化、掛載等操作,最后通過檢查系統的掛載狀態并真實地使用硬盤來驗證硬盤設備是否成功添加
- 第1步:虛擬機系統關機,單擊“編輯虛擬機設置”選項,在彈出的界面中單擊“添加”按鈕,新增一塊硬件設備
- 第2步:選擇類型為“硬盤”,然后單擊“下一步“
- 第3步:選擇虛擬硬盤類型為SATA,并單擊“下一步”按鈕,這樣虛擬機中的設備名稱過一會后應該為/dev/sdb
- 第4步:選中“創建新虛擬磁盤”單選按鈕,而不是其他選項,單擊“下一步”
- 第5步:將“最大磁盤大小”設置為默認的20GB,這個數值是限制這臺虛擬機所使用的最大硬盤空間,而不是立即將其填滿,因此默認20GB就很合適了。單擊“下一步”
- 第6步:設置磁盤文件的文件名和保存位置(這里采用默認設置即可,無需修改),直接單擊“完成”按鈕
- 第7步:將新硬盤添加好后就可以看到設備信息了
按照前文講解的udev服務命名規則,第二個被識別的SATA設備應該會被保存為/dev/sdb,這個就是硬盤設備文件了,但在開始使用之前還需要進行分區操作,例如從中取出一個2GB的分區設備以供后面的操作使用
1、fdisk命令-(分區)
fdisk命令用于新建、修改及刪除磁盤的分區表信息,語法:“fdisk 磁盤名稱”
在Linux系統中,管理硬盤設備最常用的方法就屬fdisk命令;它提供了集添加、刪除、轉換分區等功能于一身的“一站式分區服務”;這些參數是交互式的;其參數有:
參數 | 作用 |
---|---|
m | 查看全部可用的參數 |
n | 添加新的分區 |
d | 刪除某個分區信息 |
l | 列出所有可用的分區類型 |
t | 改變某個分區的類型 |
p | 查看分區表信息 |
w | 保存并退出 |
q | 不保存直接退出 |
第1步:使用fdisk命令來嘗試管理/dev/sdb硬盤設備,在看到提示信息后輸入參數p來查看硬盤設備內已有的分區信息,其中包括了硬盤的容量大小、扇區個數等信息:
[root@linuxprobe ~]# fdisk /dev/sdbWelcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x3b69fc1b.Command (m for help): p # 查看硬盤設備內的已有分區信息
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0x3b69fc1b
第2步:輸入參數n嘗試添加新的分區。系統會要求您是選擇繼續輸入參數p來創建主分區、還是輸入參數e來創建擴展分區。這里輸入p來創建主分區:
Command (m for help): n # 參數n嘗試添加新分區
Partition typep primary (0 primary, 0 extended, 4 free)e extended (container for logical partitions)
Select (default p): p # 參數p創建主分區、e創建擴展分區
第3步:確認后,系統要求您先輸入主分區的編號。在前文得知,主分區的編號范圍是1~4,因此這里輸入默認的1就可以。接下來系統會提示定義起始的扇區位置,這里不需要改動,敲擊回車即可,系統會自動計算出最靠前的空閑扇區位置。最后,系統會要求定義分區的結束扇區位置,這其實就是要去定義整個分區的大小是多少。我們不用去計算扇區的個數,只需要輸入+2G即可創建一個容量為2GB的硬盤分區。
Partition number (1-4, default 1): 1 # 輸入主分區的編號
First sector (2048-20971519, default 2048): # 不改動,系統自定義
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +2GCreated a new partition 1 of type 'Linux' and of size 2 GiB.
第4步:再次使用參數p查看硬盤設備中的分區信息。果然能看到一個名稱為/dev/sdb1、起始扇區位置為2048、結束扇區位置為4196351的主分區了。敲擊參數w回車,這樣分區信息才是真正的寫入成功!
Command (m for help): p # 查看硬盤設備中的分區信息
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0x3b69fc1bDevice Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 LinuxCommand (m for help): w # 保存退出
The partition table has been altered.
Syncing disks.
分區信息中第六個字段的Id值代表標識該分區作用的編碼,幫助用戶快速了解該分區的作用,一般沒必要修改。使用l參數查看都有哪些的磁盤編碼,之后做SWAP再修改:
Command (m for help): l0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignmente W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
第5步:執行完畢后,Linux系統會自動把這個硬盤主分區抽象成/dev/sbd1設備文件。可使用file命令查看該文件的屬性,有時候系統并沒有自動同步,這時可以輸入partprobe命令手動將分區信息同步到內核,而且一般推薦連續兩次執行該命令,如果不行,就重啟;
[root@linuxprobe ~]# file /dev/sdb1
/dev/sdb1: cannot open `/dev/sbd1' (No such file or directory)
[root@linuxprobe ~]# partprobe
[root@linuxprobe ~]# partprobe
[root@linuxprobe ~]# file /dev/sdb1
/dev/sdb1: block special (8/17)
2、mkfs命令-(格式化)
如果硬件存儲設備沒有進行格式化,則Linux系統無法得知怎么在其上寫入數據。因此,在對存儲設備進行分區后還需要進行格式化操作。在Linux系統中用于格式化操作的命令是mkfs。在終端輸入mkfs后再敲擊兩下Tab鍵,會有如下:
[root@linuxprobe ~]# mkfs
mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.fat mkfs.minix mkfs.msdos mkfs.vfat mkfs.xfs
命令把常用的文件系統名稱用后綴的方式保存成了多個命令文件,語法:“mkfs.文件類型名稱”
示例:格式分區為XFS的文件系統:
[root@linuxprobe ~]# mkfs.xfs /dev/sdb1
3、(掛載)
接下來就是掛載并使用存儲設備了。首先創建一個用于掛載設備的掛載點目錄;然后使用mount命令將存儲設備與掛載點進行關聯;最后使用df -h命令來查看掛載狀態和硬盤使用量信息:
[root@linuxprobe ~]# mkdir newFS
[root@linuxprobe ~]# mount /dev/sdb1 /newFS
[root@linuxprobe ~]# df -h
df: /run/user/0/gvfs: Transport endpoint is not connected
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.7G 0 4.7G 0% /dev
tmpfs 4.7G 0 4.7G 0% /dev/shm
tmpfs 4.7G 9.6M 4.7G 1% /run
tmpfs 4.7G 0 4.7G 0% /sys/fs/cgroup
/dev/mapper/rhel-root 35G 7.2G 28G 21% /
/dev/sdb 10G 104M 9.9G 2% /app
/dev/loop0 13G 13G 0 100% /mnt
/dev/sda1 1014M 273M 742M 27% /boot
tmpfs 952M 12K 952M 1% /run/user/42
tmpfs 952M 4.0K 952M 1% /run/user/0
/dev/sdb1 2.0G 47M 2.0G 3% /newFS
4、du命令
du命令用于查看分區或目錄所占用的磁盤容量大小,語法:“du -sh 目錄名稱”
[root@linuxprobe ~]# du -sh /*
0 /aa
0 /app
0 /bin
233M /boot
0 /dev
34M /etc
136K /git_app
13M /home
0 /lib
0 /lib64
0 /media
13G /mnt
...
先從某些目錄復制過來一批文件,然后查看這些文件共占用了多大的容量:
[root@linuxprobe ~]# cp -rf /etc/* /newFS
[root@linuxprobe ~]# ls /newFS
asjtime hostname profile.d
aliases hosts protocols
...
[root@linuxprobe ~]# du -sh /newFS
39M /newFS/
要想使這個設備文件的掛載永久有效,則需要把掛載的信息寫入到配置文件:
[root@linuxprobe ~]# vim /etc/fstab
...
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=388c3bda-5f06-4efe-9f02-0b5dd5ade2c3 /boot xfs defaults 0 0
/dev/mapper/rhel-swap none swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defualts 0 0
/dev/sdb1 /newFS xfs defaults 0 0
六、添加交換分區
SWAP交換分區是一種通過在硬盤中預先劃分一定的空間,然后把內存中暫時不常用的數據臨時存放到硬盤中,以便騰出物理內存空間讓活躍的程序服務來使用的技術。
就是讓硬盤幫內存分擔壓力。但由于交換分區是通過硬盤設備讀寫數據的,速度肯定比物理內存慢,因此只有當真實內存耗盡后才會調用交換分區的資源;
交換分區的創建過程與前面講到的掛載并使用存儲設備的過程相似。在對/dev/sdb存儲設備進行分區操作前,下面是建議:在生成環境,交換分區的大小一般為真實物理內存的1.5~2倍。
# 這里取出5G的主分區作為交換分區資源
[root@linuxprobe ~]# fdisk /dev/sdbWelcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.Command (m for help): n #
Partition typep primary (1 primary, 0 extended, 3 free)e extended (container for logical partitions)
Select (default p): p #
Partition number (2-4, default 2):
First sector (4196352-20971519, default 4196352):
Last sector, +sectors or +size{K,M,G,T,P} (4196352-20971519, default 20971519): +5GCreated a new partition 2 of type 'Linux' and of size 5 GiB.# 我們就得到了一個容量為5G的新分區,下面修改硬盤的標識碼:改成82(Linux swap)方便以后知道它的作用
Command (m for help): t #
Partition number (1,2, default 2): 2 #
Hex code (type L to list all codes): 82 # Changed type of partition 'Linux' to 'Linux swap / Solaris'.Command (m for help): p #
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0x3b69fc1bDevice Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
/dev/sdb2 4196352 14682111 10485760 5G 82 Linux swap / SolarisCommand (m for help): w # w參數退出分區表編輯工具
The partition table has been altered.
Syncing disks.
1、mkswap命令
mkswap命令用于對新設備做出交換分區格式化,語法:“mkswap 設備名稱”
[root@linuxprobe ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 5 GiB (5368705024 bytes)
no label, UUID=45a44047...
2、swapon命令
swapon命令用于激活新的交換分區設備,語法:“swapon 設備名稱”
示例:使用swapon命令把準備好的SWAP硬盤設備正式掛載到系統中,可以使用free -m命令查看交換分區的大小變化:
[root@linuxprobe ~]# free -mtotal used free shared buff/cache available
Mem: 9519 730 7704 10 1084 8472
Swap: 2047 9 2038
[root@linuxprobe ~]# swapon /dev/sdb2
[root@linuxprobe ~]# free -mtotal used free shared buff/cache available
Mem: 9519 730 7704 10 1084 8472
Swap: 7167 9 7158
為了能夠讓新的交換分區設備在重啟后依然生效,將其寫入配置文件中:
[root@linuxprobe ~]# vim /etc/fstab
...
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=388c3bda-5f06-4efe-9f02-0b5dd5ade2c3 /boot xfs defaults 0 0
/dev/mapper/rhel-swap none swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defualts 0 0
/dev/sdb1 /newFS xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
七、磁盤容量配額
1、quota技術
root管理員需要使用磁盤容量限額服務來限制某位用戶或某個用戶組針對特定文件夾可以使用的最大硬盤空間或最大文件個數,一旦達到這個最大值就不再允許繼續使用。可以使用quota技術進行磁盤容量配置限額管理,從而限制用戶的硬盤可用容量或能創建的最大文件個數。quota技術還有軟限制和硬限制的功能。
- 軟限制:當達到軟限制時會提示用戶,但仍允許用戶在限定的額度內繼續使用
-
硬限制:當達到硬限制時會提示用戶,且強制終止用戶的操作
RHEL 8系統中已經安裝了quota磁盤容量配額服務程序包,但存儲設備卻默認沒有開啟對quota技術的支持,此時需要手動編輯配置文件再重啟一次,讓系統中的啟動目錄(/boot)能夠支持quota磁盤配額技術
[root@linuxprobe ~]# vim /etc/fstab
...
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=388c3bda-5f06-4efe-9f02-0b5dd5ade2c3 /boot xfs defaults,uquota 1 2
/dev/mapper/rhel-swap none swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defualts 0 0
/dev/sdb1 /newFS xfs defaults 0 0
[root@linuxprobe ~]# reboot
早期的Linux系統使用的是usrquota參數,而RHEL 7/8系統使用是uquota參數。重啟系統后使用mount命令查看,發現/boot目錄已經支持quota磁盤配額技術了:
[root@linuxprobe ~]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota)
接下來創建一個用于檢查quota磁盤容量配額效果的用戶tom,并針對/boot目錄增加其他人的權限,保證用戶能夠正常寫入數據:
[root@linuxprobe ~]# useradd tom
[root@linuxprobe ~]# chmod -R o+w /boot
2、xfs_quota命令
xfs_quota命令用于管理設備的磁盤容量配額,語法:“xfs_quota [參數] 配額 文件系統”
這是專門針對XFS文件系統來管理quota磁盤容器配額服務而設計的命令,其中-c參數用于以參數的形式設置要執行的命令;-x參數是專家模式,讓運維人員能夠對quota服務進行更多復雜的配置。接下來使用xfs_quota命令來設置用戶tom對/boot目錄的quota磁盤容量配額。
# 硬盤使用量的軟限制和硬限制分別為3MB和6MB;創建文件數量的軟限制和硬限制分別為3個和6個
[root@linuxprobe ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot
[root@linuxprobe ~]# xfs_quota -x -c report /bootBlocks
UserID Used Soft Hard Warn/Grace
----------------------------------------------------------
root 114964 0 0 00[-------]
tom 0 3072 6144 00[-------]
Linux系統中,每個文件都會被一個獨立的inode信息塊所保存屬性信息,一個文件對應一個inode信息塊,所有isoft和ihard就是通過限制了系統最大使用的inode個數來限制了文件格式。bsoft和bhard則是代表文件所占block塊大小,也就是文件最多所占用的總統計
切換普通用戶,然后分別創建一個體積為5MB和8MB的文件,發現收到了限制:
[root@linuxprobe ~]# su - tom
[tom@linuxprobe ~]$ cd /boot
[tom@linuxprobe boot]$ dd if=/dev/zero of=/boot/tom bs=5M count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.00298178 s,1.8 GB/s
[tom@linuxprobe boot]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
dd:error writing '/boot/tom':Disk quota exceeded
1+0 records in
1+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.00298178 s,1.1 GB/s
3、edquota命令
edquota命令用于管理系統的磁盤配額,語法:”edquota [參數] 用戶名“
在為用戶設置quota磁盤容量配額限制后,可以使用edquota命令按需修改限額的數值,其中-u參數表示要針對哪個用戶進行設置;-g參數表示要針對哪個用戶組進行設置
參數 | 作用 |
---|---|
-u | 對某個用戶進行設置 |
-g | 對某個用戶組進行設置 |
-p | 復制原有的規則到新的用戶/組 |
-t | 限制寬限期限 |
edquota命令會調用Vi或Vim編輯器來讓root管理員修改要限制的具體細節。
# 手動把用戶tom的硬盤使用量的硬限額從5MB提升到8MB
[root@linuxprobe ~]# edquota -u tom
Disk quotas for user tom (uid 1001):Filesystem blcoks soft hard inodes soft hard/dev/sda1 4096 3072 8192 1 3 6
[root@linuxprobe ~]# su - tom
[tom@linuxprobe ~]$ cd /boot
[tom@linuxprobe boot]$ dd if=/dev/zero of=/boot/tom bs=8M count=1
dd:error writing '/boot/tom':Disk quota exceeded
1+0 records in
1+0 records out
8388608 bytes (8.2 MB, 4.0 MiB) copied, 0.00298178 s,452 GB/s
八、VDO虛擬數據優化
Virtual Data Optimize是一種通過壓縮或刪除存儲設備上的數據來優化存儲空間技術,簡稱VOD,中文叫虛擬數據優化。VDO技術的關鍵就是對硬盤內原有的數據進行刪重操作。還可以對日志和數據庫進行自動壓縮,進一步減少存儲浪費的情況,針對各種類型文件的壓縮效果如下:
文件名 | 描述 | 類型 | 原始大小(KB) | 實際占用空間(KB) |
---|---|---|---|---|
dickens | 狄更斯文集 | 英文原文 | 9953 | 9948 |
mozilla | Mozilla的1.0可執行文件 | 執行程序 | 50020 | 33228 |
mr | 醫用resonanse圖像 | 圖片 | 9736 | 9272 |
nci | 結構化的化學數據庫 | 數據庫 | 32767 | 10168 |
ooffice | Open Oiffce.org 1.01 DLL | 可執行程序 | 6008 | 5640 |
osdb | 基準測試用的MySQL格式示例數據庫 | 數據庫 | 9849 | 9824 |
reymont | 瓦迪斯瓦夫·雷蒙特的書 | 6471 | 6312 | |
samba | samba源代碼 | src源碼 | 21100 | 11768 |
sao | 星空數據 | 天文格式的bin文件 | 7081 | 7036 |
webster | 辭海 | HTML | 40487 | 40144 |
xml | XML文件 | HTML | 5220 | 2180 |
x-ray | 透視醫學圖片 | 醫院數據 | 8275 | 8260 |
VDO可以作為本地文件系統、iSCSI或Ceph存儲下的附加存儲層,支持本地和遠程存儲。專家建議做虛擬機或容器時,采用邏輯與物理10:1的比率進行配置,即使用1TB的物理存儲對應10TB的邏輯存儲;而做對象存儲時(例如Ceph)則采用3:1的比率進行配置
特殊情況:
-
如果公司服務器上已有DM crypt之類的技術是可以與VDO兼容的,但記得先做加密卷再使用VDO。因為加密會使重復的數據變得有所不同,因此刪重操作無法實現,始終記得把加密層放到VDO之下
-
VDO技術不可疊加使用,1T物理存儲提升成10T邏輯存儲沒問題,再用10T翻成100T就不行了
示例:把虛擬機關閉,添加一塊容量為20G的新SATA硬盤,開機后就能看到這塊名稱為/dev/sdc的新硬盤了
[root@linuxprobe ~]# ls -l /dev/sdc
brw-rw---- 1 root disk 8, 32 Jul 6 10:27 /dev/sdc
RHEL/CentOS 8系統中默認已經啟用VDO技術了;如果系統沒有安裝的話,使用yum/dnf命令即可完成:
[root@linuxprobe ~]# dnf install kmod-kvdo vdo
Updating Subscription Management repositories.
Last metadata expiration check: -88 days, 17:01:19 ago on Tue 01 Oct 2024 05:32:39 PM CST.
Package kmod-kvdo-6.2.8.7-94.el8.x86_64 is already installed.
Package vdo-6.2.9.7-14.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
第1步:創建一個全新的VDO卷
管理設備用的就是vdo命令本身,name參數代表新的設備卷的名稱;device參數代表由哪塊磁盤進行操作;vdoLogicalSize參數代表制作后的邏輯卷大小,遵循紅帽推薦原則,20G硬盤翻成200G邏輯卷:
[root@linuxprobe ~]# vdo create --name=storage --device=/dev/sdc --vdoLogicalSize=200G
Creating VDO storage
Starting VDO storage
Starting VDO storage
VDO instance - volume is ready at /dev/mapper/storage
第2步:使用status參數查看新建卷的概述信息:
[root@linuxprobe ~]# vdo status --name=storage
VDO status:...
# 輸出信息中包含了VDO卷的創建時間、主機名、版本、是否刪重(Deduplication)及是否壓縮(Compression)等關鍵指標
第3步:對新建卷做格式化操作并掛載使用
新建的VDO卷設備會存放在/dev/mapper目錄下,以設備名稱命名的文件,另外掛載前可以用udevadm settle命令來對設備進行一次刷新操作,避免剛剛的配置沒有生效:
[root@linuxprobe ~]# mkfs.xfs /dev/mapper/storage
meta-data=/dev/mapper/storage isize=512
...
[root@linuxprobe ~]# udevadm settle
[root@linuxprobe ~]# mkdir /storage
[root@linuxprobe ~]# mount /dev/mapper/storage /storage
如果想看設備的實際使用情況,用vdostats命令即可,human-readable參數作用是存儲容量自動進位,以更易讀的單位輸出
[root@linuxprobe ~]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/storage 20.0G 4.0G 16.0G 20% 99%
這里顯示的Size是實際物理存儲空間大小,20.0G是硬盤的大小,如果想看邏輯存儲空間可以用df命令進行查看:
[root@linuxprobe ~]# df -h
...
/dev/mapper/storage 200G 2.4G 198G %2 /storage
第4步:隨便復制來一個大文件,看看占用了多少容量,以及空間節省率Space saving是多少?
[root@linuxprobe ~]# cp /media/cdrom/images/install.img /storage/rhel.img
[root@linuxprobe ~]# vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/storage 20.0G 4.5G 15.5G 22% 55%
第5步:將設備設置成永久掛載生效,一直提供服務
[root@linuxprobe ~]# blkid /dev/mapper/storage
/dev/mapper/storage: UUID="cd4ef12..." TYPE="xfs"[root@linuxprobe ~]# vim /etc/fstab
...
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=388c3bda-5f06-4efe-9f02-0b5dd5ade2c3 /boot xfs defaults 0 0
/dev/mapper/rhel-swap none swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defualts 0 0
/dev/sdb1 /newFS xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
UUID=cd4ef12... /storage xfs defaults,_netdev 0 0
九、軟硬方式鏈接
在Linux系統中存在軟鏈接和硬鏈接
軟鏈接:也叫符號鏈接,僅僅包含所鏈接文件的名稱和路徑,像個記錄地址的標簽。當原始文件被刪除或移動后,新的鏈接文件也會隨之失效,不能被訪問,可以對文件、目錄做軟鏈接,跨文件系統也不是問題。
硬鏈接:“指向原始文件block的指針”,系統會創建出一個與原來一模一樣的inode信息塊。每添加一個硬鏈接,該文件的inode個數就會加1;而且只有當該文件的inode個數為0時,才算徹底將它刪除。因此即便原始文件被刪除,依然可以通過硬鏈接來訪問它。不能跨分區對目錄文件進行硬鏈接;
1、ln命令
ln命令用于創建文件的軟硬鏈接,語法:“ln [參數] 原始文件名 鏈接文件名”
其參數如下;在使用ln命令時,是否添加-s參數,將創建出性質不同的兩種“快捷方式”。
參數 | 作用 |
---|---|
-s | 創建“符號鏈接”(如果不帶-s參數,則默認創建硬鏈接) |
-f | 強制創建文件或目錄的鏈接 |
-i | 覆蓋前先詢問 |
-v | 顯示創建鏈接的過程 |
示例:創建一個文件,做個軟鏈接:
[root@linuxprobe ~]# echo "Welcome to linuxprobe.com" > old.txt
[root@linuxprobe ~]# ln -s old.txt new.txt
[root@linuxprobe ~]# cat old.txt
Welcome to linuxprobe.com
[root@linuxprobe ~]# cat new.txt
Welcome to linuxprobe.com
[root@linuxprobe ~]# ls -l old.txt
-rw-r--r-- 1 root root 26 Jul 6 14:01 old.txt
原始文件叫old,新的軟鏈接文件叫new。刪掉原始文件后,軟鏈接立刻無法讀取了:
[root@linuxprobe ~]# rm -f old.txt
[root@linuxprobe ~]# cat new.txt
cat: new.txt: No such file or directory
接下來創建硬鏈接:
[root@linuxprobe ~]# echo "Welcome to linuxprobe.com" > old.txt
[root@linuxprobe ~]# ln old.txt new.txt
[root@linuxprobe ~]# cat old.txt
Welcome to linuxprobe.com
[root@linuxprobe ~]# cat new.txt
Welcome to linuxprobe.com
[root@linuxprobe ~]# ls -l old.txt
-rw-r--r-- 2 root root 26 Jul 6 14:05 old.txt
發現創建的硬鏈接文件竟然會讓文件屬性第二列的數字變成了2,這個數字就是文件的inode信息塊數量
[root@linuxprobe ~]# rm -f old.txt
[root@linuxprobe ~]# cat new.txt
Welcome to linuxprobe.com
致謝
在此,我要對所有為知識共享做出貢獻的個人和機構表示最深切的感謝。同時也感謝每一位花時間閱讀這篇文章的讀者,如果文章中有任何錯誤,歡迎留言指正。?
學習永無止境,讓我們共同進步!!