一:硬碟存儲 1、存儲類型 根據存儲的特性不同,可以將存儲分為記憶體和外存兩類。 記憶體:又叫做主存儲器,電腦中所有程式的運行都是在記憶體中進行。 外存:又叫做輔助存儲器,因為記憶體容量小且斷電會丟失所有數據。所以磁碟來實現數據的持久化存儲。例如:硬碟,U盤,軟盤,光碟 2、硬碟和磁碟: 磁碟是一個廣泛的 ...
一:硬碟存儲
1、存儲類型
根據存儲的特性不同,可以將存儲分為記憶體和外存兩類。
-
記憶體:又叫做主存儲器,電腦中所有程式的運行都是在記憶體中進行。
-
外存:又叫做輔助存儲器,因為記憶體容量小且斷電會丟失所有數據。所以磁碟來實現數據的持久化存儲。例如:硬碟,U盤,軟盤,光碟
2、硬碟和磁碟:
磁碟是一個廣泛的概念,是一個總的稱呼,用來描述多種不同類型的存儲介質,包括硬碟、軟盤、光碟、快閃記憶體盤等等。
所以硬碟也可以被稱為磁碟,因為硬碟也是一種磁性存儲介質。
3、硬碟類型
根據存儲原理的不同,可以將硬碟分為機械硬碟和固態硬碟兩類。
-
機械硬碟:HDD(Hard Disk Drive), 由物理碟片、磁頭、控制電機、轉軸等幾部分組成。
-
固態硬碟:SSD(Solid State Drive) ,用固態電子存儲晶元陣列而製成的硬碟。
4、介面類型
從整體的角度上,硬碟介面分為IDE、SCSI、STAT、USB、M.2等類型。
- IDE:133MB/s,並行介面,早期家用電腦介面(淘汰了)
- SCSI:640MB/s,並行介面,早期伺服器用的介面
- SATA:6Gbps,SATA數據埠與電源埠是分開的,即需要兩條線,一條數據線,一條電源線, 一般的家用電腦的介面
- SAS:6Gbps,SAS是一整條線,數據埠與電源埠是一體化的,SAS中是包含供電線的,而SATA中不包含供電線。SATA標準其實是SAS標準的一個子集,二者可相容,SATA硬碟可以插入SAS主板上,反之不行。
- USB:Universal Serial Bus,中文叫通用串列匯流排,480MB/s
- M.2:M.2介面,是Intel推出的一種替代MSATA新的介面規範(M.2就是從筆記本誕生的)。可以相容多種通信協議,如sata、PCIe、USB等。如果 M.2 插槽如果不支持特定的協議,相應的固態硬碟將無法識別和使用。
5、硬碟尺寸
伺服器使用的硬碟尺寸只要有兩種,LFF和SFF。
-
LFF:3.5寸硬碟
-
SFF:2.5寸硬碟
6、數據的存儲方式
機械硬碟存儲數據的時候,是將數據存儲在其內部的盤面上。盤面類似於DVD光碟,每個盤面劃分成了一圈一圈的磁軌,最外圈是0磁碟。然後每個磁碟有劃分為了N多個小塊,這個小塊叫做扇區。扇區大小固定,是512byte。
0磁軌0扇區:指的就是最外面那個磁碟的第一個扇區,大小是512位元組。
7、硬碟空間的使用
在伺服器上加入一塊新的硬碟後,需要經過分區、格式化和掛載才能正常使用硬碟的空間。
- 硬碟分區:將一個物理硬碟在邏輯上分為多個硬碟,每一個邏輯硬碟就叫做一個分區。
- 創建文件系統:硬碟或分區格式化的過程就是創建文件系統的過程。
- 掛載新文件系統:將額外文件系統與根文件系統某現存的目錄建立起關聯關係,進而使得此目錄做為其它文件訪問入口的行為
8、硬碟的分區說明
將硬碟進行分區具備以下優點:
- 便於數據管理,可以將操作系統、應用程式、用戶數據等分別存儲在不同的分區
- 可以安裝多個操作系統和使用不同的文件系統,將不同的操作系統安裝在不同的分區中,這樣可以避免不同操作系統之間的衝突。
- 可以優化磁碟的性能,將操作系統、應用程式等放置在不同的分區中,可以避免數據碎片,提升硬碟讀寫速度。
對硬碟進行分區的時候有兩種分區方式(MBR分區和GPT)分區,不同的分區方式具有不同的特點。
MBR分區:
Master Boot Record(主引導記錄),1982年開發而來,使用32位表示扇區數,分區的大小不能超過2T,最多只能有四個主分區,如果需要使用更多的分區,可以將一個分區格式化為邏輯分區,再基於邏輯分區創建多個擴展分區。
硬碟使用MBR的分區類型方式後,會將整個硬碟的分區信息放在0磁軌0扇區這個512位元組大小的空間中,前446位元組存放boot loader,中間64位元組存放分區表信息。每16位元組用來標識一個分區信息。最後2位元組作為標誌位。
MBR的三種分區類型
- 主分區:primary。可以存放數據也可以裝系統
- 擴展分區:extended。不能直接存數據,需要在裡面劃分邏輯分區才能存放數據(相當於一個容器)
- 邏輯分區:logical。作用和主分區一樣
GPT分區:
GUID(Globals Unique Identifiers) partition table,最多支持128個分區,其中沒有擴展分區的概念。每個分區都可以是主分區.每個分區的最大空間理論上可以達到9.4ZB。
BIOS和UEFI:
作用:BIOS和UEFI都是負責電腦硬體初始化、開機自檢和引導操作系統。
- BIOS:是只讀記憶體(ROM)中的一段程式,這段程式叫做"基本輸入輸出系統"(BasicInput/Output System),簡稱為BIOS,電腦通電後,第一件事就是讀取ROM晶元中的程式。
- EFI:(Extensible Firmware Interface)可擴展固件介面,最初由Intel開發,是Intel的專有技術。是BIOS的升級版。
- UEFI:(Unified Extensible Firmware Interface)統一的可擴展固件介面,是基於EFI標準的一個具體實現,並由多個公司共同推動和支持,現在UEFI是一個開放的標準,UEFI不再是intel的專有技術。
BIOS和UEFI的區別
- BIOS只能引導傳統的MBR分區,UEFI支持MBR、GPT等分區。
- UEFI提供了Secure Boot(安全啟動)功能,在啟動過程中只載入由受信任的製造商簽名的軟體和驅動程式。
- UEFI支持的硬體設備和介面更多,例如USB 3.0、NVMe、網路堆棧等
- UFEI提供了圖形界面,可以用滑鼠操作,BIOS只能用鍵盤操作。
windows:只能安裝 BIOS + MBR 或是 UEFI + GPT組合。
linux:可以實現 BIOS + GPT + GRUB 組合
Linux中的設備文件:
在linux中,一切及皆文件,包括硬體設備。硬體設備會被映射為/dev
下麵的一個文件設備文件。
設備文件根據存儲單位的不同分為兩種:
- 塊設備文件:存儲單位是block,例如硬碟。
- 字元設備文件:存儲單位是char,例如鍵盤。
設備文件的命令規則:
# SAS,SATA,SCSI,IDE,USB: /dev/sdX
# nvme協議: /dev/nvme0n#
# 虛擬磁碟: /dev/vd 或/dev/xvd
查看塊設備文件:lsblk
tom@ubuntu1604:~$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 8a39188a-59cd-4899-b4c1-22aec246c18f /
├─sda2
└─sda5 swap 4442a597-37c1-4639-bc25-881505c12d98 [SWAP]
sdb
├─sdb1 ntfs 老毛桃U盤 1C98D9A698D97EA8
└─sdb2 vfat EFI 0BE8-0ECB
sr0 iso9660 Ubuntu-Server 16.04.6 LTS amd64 2019-02-27-00-06-32-00
二:文件系統
1、文件系統的概念
文件系統就是在操作系統中負責管理和存儲文件信息的軟體結構稱為文件管理系統。
文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索。
文件系統的創建:
硬碟或分區在進行格式化的過程,就是創建文件系統的過程。
windows 常用文件系統
- FAT32:最多只能支持16TB的文件系統和4GB的文件
- NTFS:New Technology File System。windows獨有的文件系統,linux不支持。最多只能支持16EB的文件系統和16EB的文件
- exFAT:Linux和windows都支持,時為瞭解決FAT32等不支持4G及其更大的文件而推出de1,適合於快閃記憶體的文件系統,例如U盤。
Linux 常用文件系統
- ext系列:最新版本的時ext4,Ext4的文件系統容量達到1EB,而支持單個文件則達到16TB,理論上支持無限數量的子目錄。
- xfs:最大可以支持8EB的文件系統,而支持單個文件則達到8EB,能以接近裸設備I/O的性能存儲數據。
- swap:用於Linux的交換分區,在Linux中,使用整個交換分區來提供虛擬記憶體。
- iso9660: 光碟的文件系統類型
裸文件系統
- raw:裸文件系統是指未經過格式化的磁碟分區或映像文件,因此它沒有文件系統結構和元數據,也沒有任何文件或目錄可見。
裸文件系統是一個塊設備,它可以像其他塊設備一樣進行讀寫操作,因此裸文件系統通常用於虛擬化環境中,作為虛擬機磁碟鏡像的基礎。
網路文件系統
- NFS:(Network File System)網路文件系統,一般使用在區域網中。
- CIFS:(Common Internet File System)通用過internet文件系統。
虛擬文件系統
- VFS: 為用戶程式提供文件和文件系統操作的統一介面,屏蔽不同文件系統的差異和操作細節。
例如:
使用ls查看磁碟上的文件,因為文件系統的功能是由操作系統的內核提供,應用程式是通過訪問文件系統,然後文件系統再去訪問具體的文件,但是不同文件系統底層是實現和區別差別可能非常大。所以程式的系統調用可能會不同,為了方便程式的統一調用,就就使用了虛擬文件系統提供統一的介面。
文件系統的組成
由三部分組成,分別是內核中的模塊,虛擬文件系統和用戶空間的管理工具。
- 內核中的模塊:提供對應文件系統的功能。例如ext4, xfs, vfat
- Linux的虛擬文件系統:提供統一的介面。例如VFS
- 用戶空間的管理工具:提供對內核文件系統管理的工具。例如mkfs.ext4, mkfs.xfs,mkfs.vfat
查看當前系統支持的文件系統:
# 方法一:
ls -l /lib/modules/`uname -r`/kernel/fs
# 方法二:
cat /proc/filesystems
2、Inode 和 Block
當某個存儲設備被格式化為EXT系列的文件系統後,文件系統會將磁碟空間分為兩部分:inode區域和數據區域(也稱為塊區域)。
Inode區域:存放文件的元數據信息
包含了若幹了Inode,每個inode存放一個文件的元數據信息(文件大小、類型、許可權、UID、GID、所有者、所屬組等信息)和唯一的Inode編號,以及指向文件數據塊的指針。
Block區域:存放文件真正的數據部分
- 存放文件的真正數據部分,數據區域被分割成一個個大小相等的塊,每個塊通常為4KB或8KB。
- 目錄塊也是存儲在數據區域中的一種特殊的數據塊,它存儲了一組目錄項,每個目錄項存放一個文件的文件名和Inode編號。
例如:
當需要訪問一個文件時,文件系統會通過目錄項找到對應的inode,然後根據inode中的信息來讀取或寫入文件的內容。因此,目錄項在文件系統中扮演了非常重要的角色,它們充當了文件和文件系統之間的橋梁。
刪除某個目錄就是把目錄文件的數據塊部分的文件列表和文件的節點編號的映射關係刪除的過程
在EXT系列文件系統中創建文件流程:
- 首先,文件系統會找到一個未使用的inode號碼,並分配給新文件。inode包含文件的元數據,如許可權、所有者、創建時間、修改時間等信息。
- 然後,文件系統會找到一個或多個未使用的數據塊,這些數據塊將用於存儲文件的實際內容。
- 接著文件系統會將inode與數據塊的信息記錄在文件系統的元數據區域中,以便以後可以找到並訪問它們。
- 最後文件系統會將文件的名稱和與該文件相關聯的inode號碼存儲在目錄中。目錄是一個特殊的文件,它包含文件系統中所有文件和目錄的列表。
3、軟鏈接和硬鏈接
軟鏈接:類似於windows的快捷方式
特點:
-
軟鏈接和源文件不是同一個文件
-
允許對目錄文件創建軟鏈接。
-
支持跨設備和跨分區創建軟鏈接。
-
創建一個軟鏈接到一個目錄下,沒有指定軟連接的名字,那麼軟連接的名字和源文件名一致
硬鏈接:一個文件多個文件名
特點:
- 不允許對目錄文件創建硬鏈接
- 不能跨設備、跨分區,例如sda1的文件不能硬鏈接到sda2上面。
4、硬碟的分區工具
fdisk
使用fdisk創建硬碟分區的時候,預設會將硬碟的分區類型格式化為MBR格式的分區類型。
例如:
# 創建分區表
root@ubuntu1804:~# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.31.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 type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p # 創建主分區
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): +10G # 分區的大小
Created a new partition 1 of type 'Linux' and of size 10 GiB.
Command (m for help): p # 查看分區表的信息
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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: 0x3ea7c314
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20973567 20971520 10G 83 Linux
Command (m for help): w # 保存設置並退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
# 刪除分區表
root@ubuntu1804:~# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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: 0x3ea7c314
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20973567 20971520 10G 83 Linux
/dev/sdb2 20973568 31459327 10485760 5G 83 Linux
Command (m for help): d # 刪除分區表
Partition number (1,2, default 2): 2 # 刪除的分區表編號 表示刪除第二個分區
Partition 2 has been deleted.
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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: 0x3ea7c314
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20973567 20971520 10G 83 Linux
Command (m for help): w #保存退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
gdisk
gdisk工具是預設會把硬碟的分區類型格式化為GPT類型。如果分區類型非gpt格式,會預設轉換為gpt格式。
例如:
# 新建分區表
root@ubuntu1804:~# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
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}: +2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to '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.
# 刪除分區表
root@ubuntu1804:~# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present # 當前硬碟的分區類型
Found valid GPT with protective MBR; using GPT.
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): E0199E20-EDB2-43D1-B653-3E8080E547EA
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 37748669 sectors (18.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300 Linux filesystem
Command (? for help): d 1 # 刪除標號為1的分區表
Using 1
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.
parted
parted工具可以管理gpt和mbr類型的分區表,其它的分區類型也可以管理,例如sun、bsd等。
註意:parted的操作都是實時生效的,需要小心使用。
例如:
# 新建分區表
root@ubuntu1804:~# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p # 將硬碟分區類型改為gpt
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes # 確認更改
(parted) mkpart primary ext4 0% 20% # mkpart 分區類型 文件系統類型 分區的開始位置 分區的結束位置 -1:表示磁碟的最後
(parted) mkpart primary ext4 20% 40%
(parted) mkpart primary ext4 40% 70%
(parted) p # 查看分區表信息
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 4295MB 4294MB ext4 primary
2 4295MB 8590MB 4295MB ext4 primary
3 8590MB 15.0GB 6442MB ext4 primary
(parted) quit
Information: You may need to update /etc/fstab.
# 刪除分區表 # 退出
root@ubuntu1804:~# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.7GB 10.7GB primary
(parted) rm 1 # rm 1 表示刪除編號為1的分區表
(parted) quit
Information: You may need to update /etc/fstab.
查看分區類型:
blkid /dev/device
PTTYPE="dos" # MBR類型
PTTYPE="gpt" # GPT類型
parted -l
Partition Table: msdos # MBR類型
Partition Table: gpt # GPT類型
fdisk -l
Disklabel type: dos # MBR類型
Disklabel type: gpt # GPT類型
修改分區類型
MBR-->GPT
parted /dev/sdb
(parted) mklabel gpt
GPT-->MBR
parted /dev/sdb
(parted) mklabel msdos
5、硬碟格式化工具
mkfs工具
mkfs是一個Linux/Unix操作系統中用於創建文件系統的命令行工具,它可以用於格式化磁碟或分區,以便在上面創建新的文件系統。
例如:
# 格式化硬碟為ext4文件系統
sudo mkfs.ext4 /dev/sdb 或 sudo mkfs -t ext4 /dev/sdb
# 指定Inode的數量
sudo mkfs -t ext4 -M 2000000 /dev/sdb
常用選項:
-t {ext2|ext3|ext4|xfs} 指定文件系統類型
-b {1024|2048|4096} 指定塊 block 大小,預設4kb
-L ‘LABEL’ 設置捲標,便於在系統中識別。
-i # 指定一個inode節點的大小;預設256位元組,即一個block可以存放16個inode
-N # 指定分區中創建多少個inode,預設inode空間占總空間的1%
硬碟掛載工具
硬碟掛載是將硬碟驅動器(例如硬碟、SSD等)連接到操作系統文件系統的過程,將某個硬碟驅動器掛載到文件系統後就可以對硬碟進行讀寫等操作。
mount工具
例如:
# 將/dev/sdb1掛載到/mnt/data 不指定文件系統類型,會自動進行檢測
sudo mount /dev/sdb1 /mnt/data
# 掛載的時候手動指定文件系統的類型
sudo mount -t ntfs /dev/sdb1 /mnt/data
說明:
使用mount進行掛載的時候,如果確定了要掛載的文件系統的類型,使用-t參數指定文件系統類型可以確保系統以正確的方式掛載文件系統,避免可能的錯誤和問題。
如果掛載的時候不確定文件系統的類型,系統會對文件系統進行自動檢測,但是當存在多個可能的文件系統類型時,系統可能會選擇錯誤的類型導致掛載失敗。
mount命令的常用參數:
-t fstype:指定文件系統類型,如果不指定會自動進行檢測
-o <掛載選項>:指定掛載選項,多個選項用逗號隔開。
# 掛載選項
# ro 以只讀方式掛載文件系統。
# remount 重新掛載文件系統,相當於先umount再mount
# defaults 使用預設的掛載選項,相當於rw, suid, dev, exec, auto, nouser, async
# async 非同步模式,記憶體更改時,寫入緩存區buffer,過一段時間再寫到磁碟中,效率高,但不安全
# sync 同步模式,記憶體更改時,同時寫磁碟,安全,但效率低下
# noatime 指定文件系統不更新最後訪問時間
# _netdev 當網路可用時才對網路資源進行掛載,如:NFS文件系統,如果網路不可達不加該選項會導致系統無法啟動。
-r:以只讀方式掛載文件系統。
-w:以可讀寫方式掛載文件系統,預設就是以可讀可寫的方式掛載
-a 自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能)
noatime選項說明:
使用 noatime
選項可以禁止系統更新文件或目錄的訪問時間戳,即 atime
屬性。當文件或目錄被訪問時,系統不會更新 atime
屬性,而是保留原來的值,可以較少磁碟IO,提高文件系統的性能。
使用noatime的場景:
在某些高併發的應用中,可能會有大量的讀取操作,如果每次讀取都更新 atime
屬性,會對系統的性能造成很大的影響。這種情況下可以考慮加noatime選項。
不能使用noatime的場景:
如果應用程式需要用到文件的訪問時間,就不能使用 noatime
選項。因為使用 noatime
選項會禁止系統更新文件或目錄的訪問時間戳,即 atime
屬性,這會導致應用程式無法獲取文件的最後訪問時間,從而影響應用程式的功能。
掛載規則說明:
- 一個掛載點同一時間只能掛載一個設備,如果掛載了多個設備就只顯示最後一個設備
- 一個設備可以掛載到多個掛載點
- 掛載點通常是空的目錄文件
umount工具
umount用於卸載掛載的文件系統。
例如:
umount device 或 umount mountpoint
# 例如:
umount /dev/sda1
查看掛載的設備
# 方法一:使用mount命令,會列出所有已掛載的設備及其掛載點
root@ubuntu1804:~# mount
/dev/sda5 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
# 方法二:查看內核參數
root@ubuntu1804:~# cat /proc/mounts
/dev/sda1 /boot ext4 rw,relatime,data=ordered 0 0
# 方法三:df命令
root@ubuntu1804:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 954M 0 954M 0% /dev
tmpfs tmpfs 198M 11M 187M 6% /run
/dev/sda5 ext4 58G 4.2G 51G 8% /
tmpfs tmpfs 986M 0 986M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 986M 0 986M 0% /sys/fs/cgroup
/dev/sda1 ext4 922M 80M 780M 10% /boot
tmpfs tmpfs 198M 0 198M 0% /run/user/0
持久掛載:
將掛載保存到/etc/fstab
中可以下次開機時,自動啟用掛載
#使用`man 5 fstab `查看/etc/fstab配置文件格式
# 格式
device mountpoint fs_type options 0 0
# 例如:
/dev/sdb1 /data ext4 defaults,noatime 0 0
# 表示將/dev/sdb1這個分區掛載到/data這個目錄,並且使用預設的掛載選項,不進行本分和文件系統檢查。
# 說明
# 備份頻率(一般用不上):0:不做備份 1:每天轉儲 2:每隔一天轉儲
# 文件系統檢查的次序:開機檢測文件系統的過程。其中允許的數字是0 1 2
# 0:不自檢 ,1:首先自檢;一般只有rootfs才用 2:非rootfs使用
6、移動設備的管理
當把u盤設備插入linux系統後,會被內核探測為SCSI設備,會被映射到/dev下作為一個設備文件。例如:/dev/sdaX、/dev/sdbX等。
-
圖形界面:usb設備會自動掛載到
/run/media/
路徑下。 -
字元界面:需要手動進行usb設備的掛載才能正常使用。
![image-20230319200153939](E:\學習文檔\Linux文件許可權管理\Linux 存儲和文件系統\Linux 存儲和文件系統_img\image-20230319200153939.png)
說明:ubuntu預設支持識別 NTFS 文件系統格式的 U 盤,CentOS 預設情況下不支持識別 NTFS 文件系統格式的 U 盤。
如果不識別需要安裝ntfs-3g
軟體包來支持 NTFS 格式的 U 盤。
插入u盤後可以通過系統日誌看到相關信息:
root@ubuntu1804:~# tail -f /var/log/syslog
Mar 19 17:14:51 ubuntu1804 kernel: [ 5822.106369] usb 1-1: new high-speed USB device number 8 using ehci-pci
Mar 19 17:14:51 ubuntu1804 kernel: [ 5822.455825] usb 1-1: New USB device found, idVendor=0930, idProduct=6544
Mar 19 17:14:51 ubuntu1804 kernel: [ 5822.455827] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Mar 19 17:14:51 ubuntu1804 kernel: [ 5822.455828] usb 1-1: Product: DataTraveler 2.0
Mar 19 17:14:51 ubuntu1804 kernel: [ 5822.455829] usb 1-1: Manufacturer: Kingston
Mar 19 17:14:51 ubuntu1804 kernel: [ 5822.455829] usb 1-1: SerialNumber: 001BFC3653BCC341E91386F4
Mar 19 17:14:51 ubuntu1804 kernel: [ 5822.458677] usb-storage 1-1:1.0: USB Mass Storage device detected
Mar 19 17:14:51 ubuntu1804 kernel: [ 5822.458909] scsi host33: usb-storage 1-1:1.0
Mar 19 17:14:52 ubuntu1804 kernel: [ 5823.499865] scsi 33:0:0:0: Direct-Access Kingston DataTraveler 2.0 1.00 PQ: 0 ANSI: 4
Mar 19 17:14:52 ubuntu1804 kernel: [ 5823.500256] sd 33:0:0:0: Attached scsi generic sg3 type 0
Mar 19 17:14:52 ubuntu1804 kernel: [ 5823.504780] sd 33:0:0:0: [sdc] 60549120 512-byte logical blocks: (31.0 GB/28.9 GiB)
Mar 19 17:14:52 ubuntu1804 kernel: [ 5823.507219] sd 33:0:0:0: [sdc] Write Protect is off
Mar 19 17:14:52 ubuntu1804 kernel: [ 5823.507220] sd 33:0:0:0: [sdc] Mode Sense: 45 00 00 00
Mar 19 17:14:52 ubuntu1804 kernel: [ 5823.509773] sd 33:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Mar 19 17:14:52 ubuntu1804 kernel: [ 5823.523647] sdc: sdc1 sdc2
Mar 19 17:14:52 ubuntu1804 kernel: [ 5823.535055] sd 33:0:0:0: [sdc] Attached SCSI removable disk
lsusb工具
lsusb工具用於顯示 USB 匯流排上連接的設備列表。使用 lsusb
可以查看連接到電腦上的 USB 設備列表。從而判斷u盤設備是否插入了系統中。
例如:查看usb設備信息:
# usbutils工具包
root@ubuntu1804:~# lsusb
Bus 001 Device 008: ID 0930:6544 Toshiba Corp. TransMemory-Mini / Kingston DataTraveler 2.0 Stick (2GB)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
7、du和df使用說明
du:disk usage。一般是用來查看目錄或指定文件的大小
選項:
-h # 自動使用合適的單位進行顯示,預設單位是kb
-s # 顯示指定目錄或文件的總大小
--exclude=/path # 用於排除指定的文件或目錄
例如:
# 查看整個系統的大小,但不統計/sys和/proc這連個虛擬文件系統
root@ecs-1746-0001:~# du -sh --exclude='/proc' --exclude='/sys' /
23G /
# 統計某個目錄下目錄文件的大小
# 需要進入待統計的目錄
root@ecs-1746-0001:~# cd DeploySystem-Ubuntu-20.04/
root@ecs-1746-0001:~/DeploySystem-Ubuntu-20.04# du -sh */ | sort -rh
2.1G packages/
5.6M lib/
3.1M phplib/
156K conf/
48K include/
16K job/
4.0K SourceCode/
# */通配符表示所有子目錄
# 統計某個目錄下每個文件的大小
# 1. 進入該目錄
root@ecs-1746-0001:~# cd DeploySystem-Ubuntu-20.04/
# 2. 進行統計
root@ecs-1746-0001:~/DeploySystem-Ubuntu-20.04# du -ah --exclude='{'.','..'}' */ | sort -rh | more
# --exclude='{'.','..'}'表示不統計.和..文件
# */通配符表示所有子目錄
df:disk free,主要用來查看掛載了的文件系統情況。
註意:df看到的文件系統中真實占用的空間大小,而非錶面上的空間大小。因為文件系統本身就有元數據,所以即使是剛創建的乾凈文件系統,也會占用一定的空間
選項:
-h:自動使用合適的單位進行數據的顯示
-T:顯示文件系統的類型
例如:
root@ubuntu1804:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 954M 0 954M 0% /dev
tmpfs tmpfs 198M 11M 187M 6% /run
/dev/sda5 ext4 58G 4.2G 51G 8% /
tmpfs tmpfs 986M 0 986M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 986M 0 986M 0% /sys/fs/cgroup
/dev/sda1 ext4 922M 80M 780M 10% /boot
tmpfs tmpfs 198M 0 198M 0% /run/user/1000
tmpfs tmpfs 198M 0 198M 0% /run/user/0
df和du統計信息不相同的情況:
df > du
的情況:
當把文件刪除了,但是空間並沒有被釋放(有進程再使用這個文件,刪除了這個文件不會馬上釋放空間)時候,使用df看到的數據比du統計的大。即:df>du
例如:
# 創建要給1G大小的文件
root@ubuntu1804:~# dd if=/dev/zero of=./a.txt bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.23766 s, 868 MB/s
#
root@ubuntu1804:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda5 ext4 58G 5.2G 50G 10% /
/dev/sda1 ext4 922M 80M 780M 10% /boot
root@ubuntu1804:~# du -sh /
5.2G /
# 在另一個視窗使用vim打開這個文件
root@ubuntu1804:~# vim a.txt
# 在本視窗刪除該文件
root@ubuntu1804:~# rm -rf a.txt
# 使用lsof查看,發現a.txt這個文件被vim進程使用,所以刪除了文件沒有釋放空間
root@ubuntu1804:~# lsof | grep delete
vim 22197 root 3r REG 8,5 1073741824 3673208 /root/a.txt (deleted)
# 再次統計大小
root@ubuntu1804:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda5 ext4 58G 5.2G 50G 10% /
/dev/sda1 ext4 922M 80M 780M 10% /boot
root@ubuntu1804:~# du -sh /
4.2G /
df < du
的情況:
當某個目錄文件掛載到其他設備了的時候(多個設備空間的組合),這就是所說的文件系統重疊時候。即df < du
例如:
# /dev/sda5分區掛載到/根目錄下,顯示已經用了4.2G空間
root@ubuntu1804:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda5 ext4 58G 4.2G 51G 8% /
/dev/sda1 ext4 922M 80M 780M 10% /boot
# 使用du工具統計根目錄大小也是4.2G
root@ubuntu1804:~# du -sh /
4.2G /
# 將sdb1分區掛載到/xx下
root@ubuntu1804:~# mount /dev/sdb1 /xx
# 創建要給1G大小的文件
root@ubuntu1804:~# dd if=/dev/zero of=/xx/a.txt bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.6664 s, 101 MB/s
# 再次使用du統計/的大小已經變為了5.2G
root@ubuntu1804:~# du -sh /
5.2G
# 使用df查看 仍然是4.2G
root@ubuntu1804:~# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda5 ext4 58G 4.2G 51G 8% /
/dev/sda1 ext4 922M 80M 780M 10% /boot
/dev/sdb1 ext4 3.9G 1.1G 2.7G 28% /xx