Linux 硬碟存儲和文件系統介紹

来源:https://www.cnblogs.com/heyongshen/archive/2023/03/20/17237268.html
-Advertisement-
Play Games

一:硬碟存儲 1、存儲類型 根據存儲的特性不同,可以將存儲分為記憶體和外存兩類。 記憶體:又叫做主存儲器,電腦中所有程式的運行都是在記憶體中進行。 外存:又叫做輔助存儲器,因為記憶體容量小且斷電會丟失所有數據。所以磁碟來實現數據的持久化存儲。例如:硬碟,U盤,軟盤,光碟 2、硬碟和磁碟: 磁碟是一個廣泛的 ...


一:硬碟存儲

1、存儲類型

根據存儲的特性不同,可以將存儲分為記憶體和外存兩類。

  • 記憶體:又叫做主存儲器,電腦中所有程式的運行都是在記憶體中進行。

  • 外存:又叫做輔助存儲器,因為記憶體容量小且斷電會丟失所有數據。所以磁碟來實現數據的持久化存儲。例如:硬碟,U盤,軟盤,光碟

2、硬碟和磁碟:

磁碟是一個廣泛的概念,是一個總的稱呼,用來描述多種不同類型的存儲介質,包括硬碟、軟盤、光碟、快閃記憶體盤等等。

所以硬碟也可以被稱為磁碟,因為硬碟也是一種磁性存儲介質。

3、硬碟類型

根據存儲原理的不同,可以將硬碟分為機械硬碟和固態硬碟兩類。

  • 機械硬碟:HDD(Hard Disk Drive), 由物理碟片、磁頭、控制電機、轉軸等幾部分組成。

  • 固態硬碟:SSD(Solid State Drive) ,用固態電子存儲晶元陣列而製成的硬碟。

image

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 插槽如果不支持特定的協議,相應的固態硬碟將無法識別和使用。
    image

image

5、硬碟尺寸

伺服器使用的硬碟尺寸只要有兩種,LFF和SFF。

  • LFF:3.5寸硬碟

  • SFF:2.5寸硬碟

image

6、數據的存儲方式

機械硬碟存儲數據的時候,是將數據存儲在其內部的盤面上。盤面類似於DVD光碟,每個盤面劃分成了一圈一圈的磁軌,最外圈是0磁碟。然後每個磁碟有劃分為了N多個小塊,這個小塊叫做扇區。扇區大小固定,是512byte。

image

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: 為用戶程式提供文件和文件系統操作的統一介面,屏蔽不同文件系統的差異和操作細節。
    image

例如:

使用ls查看磁碟上的文件,因為文件系統的功能是由操作系統的內核提供,應用程式是通過訪問文件系統,然後文件系統再去訪問具體的文件,但是不同文件系統底層是實現和區別差別可能非常大。所以程式的系統調用可能會不同,為了方便程式的統一調用,就就使用了虛擬文件系統提供統一的介面。

文件系統的組成

由三部分組成,分別是內核中的模塊,虛擬文件系統和用戶空間的管理工具。

  • 內核中的模塊:提供對應文件系統的功能。例如ext4, xfs, vfat
  • Linux的虛擬文件系統:提供統一的介面。例如VFS
  • 用戶空間的管理工具:提供對內核文件系統管理的工具。例如mkfs.ext4, mkfs.xfs,mkfs.vfat

查看當前系統支持的文件系統:

# 方法一:
ls -l  /lib/modules/`uname -r`/kernel/fs
# 方法二:
 cat /proc/filesystems

image

2、Inode 和 Block

當某個存儲設備被格式化為EXT系列的文件系統後,文件系統會將磁碟空間分為兩部分:inode區域和數據區域(也稱為塊區域)。

Inode區域:存放文件的元數據信息

包含了若幹了Inode,每個inode存放一個文件的元數據信息(文件大小、類型、許可權、UID、GID、所有者、所屬組等信息)和唯一的Inode編號,以及指向文件數據塊的指針。

Block區域:存放文件真正的數據部分

  1. ​ 存放文件的真正數據部分,數據區域被分割成一個個大小相等的塊,每個塊通常為4KB或8KB。
  2. ​ 目錄塊也是存儲在數據區域中的一種特殊的數據塊,它存儲了一組目錄項,每個目錄項存放一個文件的文件名和Inode編號。
    image

例如:

當需要訪問一個文件時,文件系統會通過目錄項找到對應的inode,然後根據inode中的信息來讀取或寫入文件的內容。因此,目錄項在文件系統中扮演了非常重要的角色,它們充當了文件和文件系統之間的橋梁。

刪除某個目錄就是把目錄文件的數據塊部分的文件列表和文件的節點編號的映射關係刪除的過程

在EXT系列文件系統中創建文件流程:

  • 首先,文件系統會找到一個未使用的inode號碼,並分配給新文件。inode包含文件的元數據,如許可權、所有者、創建時間、修改時間等信息。
  • 然後,文件系統會找到一個或多個未使用的數據塊,這些數據塊將用於存儲文件的實際內容。
  • 接著文件系統會將inode與數據塊的信息記錄在文件系統的元數據區域中,以便以後可以找到並訪問它們。
  • 最後文件系統會將文件的名稱和與該文件相關聯的inode號碼存儲在目錄中。目錄是一個特殊的文件,它包含文件系統中所有文件和目錄的列表。

3、軟鏈接和硬鏈接

軟鏈接:類似於windows的快捷方式

image

特點:

  • 軟鏈接和源文件不是同一個文件

  • 允許對目錄文件創建軟鏈接。

  • 支持跨設備和跨分區創建軟鏈接。

  • 創建一個軟鏈接到一個目錄下,沒有指定軟連接的名字,那麼軟連接的名字和源文件名一致

硬鏈接:一個文件多個文件名

image

特點:

  • 不允許對目錄文件創建硬鏈接
  • 不能跨設備、跨分區,例如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

image

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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 年初.NET工程師的求職者反饋不好找工作,尤其是B/S開發,C/S開發稍微好點。這種情況下有好多小伙伴都想轉行了,於是瞭解了一下JAVA,比.NET還捲,還是走.NET內部轉行吧,轉C/S桌面開發。本文介紹.NET幾種桌面開發技術的方向,大家可以參考一下,具體如下。 一、簡介 WinForms ...
  • 大家好,我是沙漠盡頭的狼,今天介紹一個WPF開源項目-NodeNetwork,它可以幫助我們快速構建和定製網路拓撲圖。 一、前言 在現代軟體開發中,數據可視化和可交互性越來越受到關註。為了實現這一點,通常需要使用各種圖表、表格、網路拓撲圖等控制項。然而,對於某些特殊的場景,這些控制項可能無法滿足需求,此 ...
  • 上篇文章我們介紹了 VUE+.NET應用系統的國際化-多語言詞條服務 系統國際化改造整體設計思路如下: 提供一個工具,識別前後端代碼中的中文,形成多語言詞條,按語言、界面、模塊統一管理多有的多語言詞條 提供一個翻譯服務,批量翻譯多語言詞條 提供一個詞條服務,支持後端代碼在運行時根據用戶登錄的語言,動 ...
  • 痞子衡嵌入式半月刊: 第 74 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 什麼是MongoDB分片 MongoDB分片是指將資料庫拆分成多份,把它們分散到不同的機器上,從而實現不需要功能強大的伺服器就可以存儲更多的數據和處理更多的請求。 MongoDB分片的基本思想就是將集合切分成小塊,這些塊分散到若幹分片裡面,每個分片只負責總數據的一部分。 對於應用程式來說,不必知道哪 ...
  • 網站需求:請給openlab搭建web網站 1.基於功能變數名稱www.openlab.com可以訪問網站內容為 welcome to openlab!!! 2.給該公司創建三個子界面分別顯示學生信息,教學資料和繳費網站,基於www.openlab.com/student 網站訪問學生信息,www.open ...
  • 實驗要求: 1、建立DNS伺服器,負責解析的域為openedu.com 2、要求將MX記錄指向mail.openedu.com,且對應A記錄為本機IP 3、要求將NS記錄指向ns1.openedu.com,且對應A記錄為本機IP 4、建立www的A記錄指向本機IP; 建立ftp對應A記錄為x.x.x ...
  • 硬體功耗測試 一、簡介 測試硬體的時候,避免不了功耗測試,功耗測試一般分為2種 第一個是被測硬體板子各個模組功耗情況 第二個是被測硬體整體功耗 為什麼要做功耗測試? 因為有些硬體產品是安裝電池的,一些低功耗產品比如感測器、車鑰匙等,安裝的都是紐扣電池,一節紐扣電池大概在600mAh左右,設備在安裝一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...