主頁 > 作業系統 > Linux 硬碟存盤和檔案系統介紹

Linux 硬碟存盤和檔案系統介紹

2023-03-21 06:23:32 作業系統

一:硬碟存盤

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=https://www.cnblogs.com/heyongshen/p/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

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/547421.html

標籤:Linux

上一篇:示例:iptables限制ssh鏈接服務器

下一篇:RHCE服務----DNS

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more