Linux磁盤管理基礎

Linux磁盤管理基礎


  • 硬盤結構

  • 文件系統與MBR、GTP

  • 磁盤管理三步驟:分區、格式化、掛載

  • mount


硬盤結構


盤的基本組成材質是盤片,不同容量硬盤的盤片數不等。每個盤片有兩面,都可記錄信息。盤片表面上以盤片中心為圓心,不同半徑的同心圓稱為磁道,不同盤片相
同半徑的磁道所組成的圓柱稱為柱面,每個磁道被分成許多扇形的區域,每個區域叫一個扇區,每個扇區可存儲128×2^N
次方(N=0.1.2.3)字節信息。在DOS中每扇區是128×2^2 次方=512字節。

wKiom1fGtaaxIUNQAARg2JGfD_o529.png

硬盤存儲相關術語:CHS

head:磁頭 2^8=256track:磁道 2^10=1024, 每個磁道有63個扇區,
cylinder: 柱面 柱面數=2^10   柱面容量=512*63*256=8M
secotr: 扇區,512bytes 2^6-1=63硬盤容量:512*63*1024*256=8G

wKioL1fGtenCVYsUAAR2rw-gNTQ694.png

硬盤數據結構

每個磁盤有兩個面,每個面都有一個磁頭,習慣用磁頭號來區分,扇區,磁道(或柱面)和磁頭數構成了硬盤結構的基本參數?;嬎愎綖椋?/p>

硬盤容量=盤面數×柱面數×扇區數×512字節

“簇”是硬盤上存儲數據進行分配的最小單位,不同容量的硬盤,簇的大小也不一樣,簇的概念僅適用于數據區。

注意:扇區的編號是從1開始,而不是從0開始。


盤的第一個扇區(0道0頭1扇區)被保留為主引導扇區。在主引導區內主要有兩項內容:主引導記錄MBR(Main Boot
Record)和分區表DPT(Disk Partition
Table,主引導記錄是一段程序代碼,其作用主要是對硬盤上安裝的操作系統進行引導;硬盤分區表則存儲了硬盤的分區信息。計算機啟動時將讀取該扇區的數
據,并對其合法性進行判斷(扇區最后兩個字節是否為0x55AA或0xAA55 )。


式化好的硬盤,整個磁盤按所記錄數據的作用不同可分為五部分:主引導記錄(MBR:Main Boot Record),操作系統引導記錄(OBR:
OS Boot Record),文件分配表(FAT:File Assign Table),根目錄(DIR:
Directory)和數據區(DATA)。前5個重要信息在磁盤的外磁道上。

數據存儲原理

  1. 文件的讀取 操作系統從目錄區中讀取文件信息(包括文件名、后綴名、文件大小、修改日期和文件在數據區保存的第一個簇的簇號)

  2. 文件的寫入 當我們要保存文件時,操作系統首先在DIR區中找到空區寫入文件名、大小和創建時間等相應信息,然后在Data區找到閑置空間將文件保存,并將Data區的第一個簇寫入DIR區。

  3. 文件的刪除 文件刪除工作就是刪除文件的索引節點。

Fdisk和Format的一點小說明


文件的刪除類似,利用Fdisk刪除再建立分區和利用Format格式化邏輯磁盤(假設你格式化的時候并沒有使用/U這個無條件格式化參數)都沒有將數據
從DATA區直接刪除,前者只是改變了分區表,后者只是修改了FAT表,因此被誤刪除的分區和誤格式化的硬盤完全有可能恢復……

關于硬盤,分區是不得不提到的一個概念,分區可以實現:

優化I/O性能
實現磁盤空間配額限制
提高修復速度
隔離系統和程序
安裝多個OS
采用不同文件系統

文件系統與MBR、GPT

文件系統

Linux
文件系統是一個樹形結構,以 /
目錄作為根目錄,目錄也包含其他目錄,即子目錄。我們的硬盤,在Linux上也是一個文件,叫做塊設備文件,而每一個塊設備上通過都會有一個文件系統,我
們通過掛載這個動作找到一個掛載點,以掛載點的方式將文件系統掛載到不同的設備上,從而創建文件系統的樹狀結構。

通常情況下,內核通過將某些硬盤驅動器分區上的文件系統以 / 的形式掛載來啟動這個掛載過程。當然也可以掛載到其它硬盤驅動器分區,如 /boot、/tmp 或 /home。

接下來我們再看下 Filesystem Hierarchy Standard

目錄 說明
bin 基本命令二進制文件
boot 引導加載器的靜態文件
dev 設備文件
etc 特定于主機的系統配置
lib 基本共享庫和內核模塊
media 可插拔介質的掛載點
mnt 臨時掛載文件系統的掛載點
opt 附加應用軟件包
sbin 基本系統二進制文件
srv 提供服務的數據
tpm 臨時文件
usr 次要層級結構
var 變量數據

MBR

MBR,
即MBR,全稱為Master Boot
Record,即硬盤的主引導記錄,在驅動器最前端的一段引導扇區。MBR分區表的最大可尋址的存儲空間只有2Tb(2^
32×512字節)。為了便于理解,一般將MBR分為廣義和狹義兩種:廣義的MBR包含整個扇區(引導程序、分區表及分隔標識),也就是上面所說的主引導
記錄;而狹義的MBR僅指引導程序而言。硬盤的0柱面、0磁頭、1扇區稱為主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬盤分區
表DPT(Disk Partition table)和分區有效標志。在總共512字節的主引導扇區里主引導程序(boot
loader)占446個字節,第二部分是Partition
table區(分區表),即DPT,占64個字節,硬盤中分區有多少以及每一分區的大小都記在其中。第三部分是magic
number,占2個字節,固定為0xAA55或0x55AA,這取決于處理器類型
,如果是小端模式處理器(如Intel系列),則該值為0xAA55;如果是大端模式處理器 (如Motorola6800),則該值為0x55AA。

注意:MBR是不屬于任何一個操作系統,也不能用操作系統提供的磁盤操作命令來讀取它,但可以通過命令來修改和重寫。

虛擬MBR:即 EBR (extent boot record)擴展引導記錄,其記錄表項 與MBR相同 ,用于管理擴展分區上的邏輯驅動器。

wKioL1fGtlPjZ_fVAABW5Eq-HyE973.png

MBR小結:

MBR: Master Boot Record,1982年,使用32位表示扇區數,分區不超過2T
如何分區:按柱面0磁道1扇區:512bytes446bytes: boot loader64bytes:分區表16bytes: 標識一個分區2bytes: 55AA4個主分區;3主分區+1擴展(N個邏輯分區)

GPT

GUID
磁碟分割表(GUID Partition
Table,縮寫:GPT)其含義為“全局唯一標識磁盤分區表”,是一個實體硬盤的分區表的結構布局的標準。它是可擴展固件接口(EFI)標準(被
Intel用于替代個人計算機的BIOS)的一部分,被用于替代BIOS系統中的一32bits來存儲邏輯塊地址和大小信息的主開機紀錄(MBR)分區
表。

在MBR硬盤中,分區信息直接存儲于主引導記錄(MBR)中(主引導記錄中還存儲著系統的引導程序)。但在GPT硬盤中,分區表的位置信息儲存在GPT頭中。但出于兼容性考慮,硬盤的第一個扇區仍然用作MBR,之后才是GPT頭。

為了減少分區表損壞的風險,GPT在硬盤最后保存了一份分區表的副本。


區表頭定義了硬盤的可用空間以及組成分區表的項的大小和數量。分區表頭還記錄了這塊硬盤的GUID,記錄了分區表頭本身的位置和大?。ㄎ恢每偸窃贚BA
1)以及備份分區表頭和分區表的位置和大?。ㄔ谟脖P的最后)。它還儲存著它本身和分區表的CRC32校驗。主分區表和備份分區表的頭分別位于硬盤的第二個
扇區(LBA 1)以及硬盤的最后一個扇區。備份分區表頭中的信息是關于備份分區表的。

GPT
小結: GPT:GUID(Globals Unique Identifiers)partition table
支持128個分區,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block) 使用128位UUID
表示磁盤和分區GPT分區表自動備份在頭和尾兩份,并有CRC校驗位 UEFI (統一擴展固件接口)硬件支持GPT,使操作系統啟動

wKiom1fGtnbx4YrSAAFaMGH3UBE692.png

磁盤管理三步驟:分區、格式化、掛載

磁盤管理涉及到的基本命令:

查詢類:
lsblk, blkid, e2label, findfs, dumpe2fs
free, df, du

分區類:
fdisk, gdisk, partprobe, parted

格式化類(創建文件系統)
mkfs, mkfs.ext4, mkfs.xfs, mkfs.vfat --- mke2fs

掛載類:
mount, findmnt, fuser, umount, 

編輯類:
tune2fs,e2label

修復類:
fsck, e2fsck, dd
  • 磁盤查詢

lsblk: 列出塊設備

[root@centos6 ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0 97.7G  0 part /
├─sda3   8:3    0 19.5G  0 part /testdir
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0    4G  0 part [SWAP]
sdb      8:16   0   20G  0 disk 
└─sdb1   8:17   0   20G  0 part 
sr0     11:0    1  3.7G  0 rom  /media/CentOS_6.8_Final
[root@centos6 ~]#[root@centos6 ~]#lsblk -m   # 顯示權限信息
NAME    SIZE OWNER GROUP MODE
sda     200G root  disk  brw-rw----
├─sda1  200M root  disk  brw-rw----
├─sda2 97.7G root  disk  brw-rw----
├─sda3 19.5G root  disk  brw-rw----
├─sda4    1K root  disk  brw-rw----
└─sda5    4G root  disk  brw-rw----
sdb      20G root  disk  brw-rw----
└─sdb1   20G root  disk  brw-rw----
sr0     3.7G root  cdrom brw-rw----
[root@centos6 ~]#[root@centos6 ~]#lsblk -b /dev/sda   # 以bytes方式顯示設備大小 
NAME   MAJ:MIN RM         SIZE RO TYPE MOUNTPOINT
sda      8:0    0 214748364800  0 disk 
├─sda1   8:1    0    209715200  0 part /boot
├─sda2   8:2    0 104857600000  0 part /
├─sda3   8:3    0  20971520000  0 part /testdir
├─sda4   8:4    0         1024  0 part 
└─sda5   8:5    0   4294967296  0 part [SWAP]
[root@centos6 ~]#

blkid: 塊設備屬性信息查看

-U UUID: 根據指定的UUID來查找對應的設備
-L LABEL:根據指定的LABEL來查找對應的設備
[root@centos6 ~]#blkid
/dev/sda2: UUID="baf588f0-3f89-4bb1-b01a-1b4ec3549536" TYPE="ext4" 
/dev/sda1: UUID="d27f504c-d54b-46d5-8dc3-b5ff7dca9000" TYPE="ext4" 
/dev/sda3: UUID="7778401f-6a06-4dc8-a3b9-8a6a972af2ed" TYPE="ext4" 
/dev/sda5: UUID="a3833009-be7e-4c0d-af4f-ed8045ce1652" TYPE="swap" 
/dev/sdb1: UUID="78281d98-04ec-4b62-82f5-518f80cb3a75" TYPE="ext4" 
[root@centos6 ~]#

[root@centos6 ~]#blkid -s TYPE  # 顯示所有設備文件系統 
/dev/sda2: TYPE="ext4" 
/dev/sda1: TYPE="ext4" 
/dev/sda3: TYPE="ext4" 
/dev/sda5: TYPE="swap" 
/dev/sdb1: TYPE="ext4"

findfs: 查找分區

findfs - Find a filesystem by label or UUID
findfs[options] LABEL=<label>
findfs[options] UUID=<uuid>
[root@centos6 ~]#findfs UUID=baf588f0-3f89-4bb1-b01a-1b4ec3549536  # UUDI可通過blkid查看或直接查看
/etc/fstab/dev/sda2
[root@centos6 ~]#

**dumpe2fs: 查看超級塊信息

[root@centos6 ~]#dumpe2fs /dev/sda1

wKiom1fGt7XTUJDRAADGJEBPhFs938.png

wKioL1fGt8qg3Bv6AADswz9anQU127.png

free: 內存空間使用狀態

free - Display amount of free and used memory in the systemfree [OPTION]
-m: 以MB為單位
-g: 以GB為單位
[root@centos6 ~]#free
             total       used       free     shared    buffers     cached
Mem:       1907300     627884    1279416       2208      27832     286968
-/+ buffers/cache:     313084    1594216
Swap:      4194300          0    4194300
[root@centos6 ~]#free -m 
             total       used       free     shared    buffers     cached
Mem:          1862        613       1249          2         27        280
-/+ buffers/cache:        305       1556
Swap:         4095          0       4095
[root@centos6 ~]#free -h 
             total       used       free     shared    buffers     cached
Mem:          1.8G       612M       1.2G       2.2M        27M       280M
-/+ buffers/cache:       305M       1.5G
Swap:         4.0G         0B       4.0G
[root@centos6 ~]#

df: 文件系統空間占用等信息的查看工具

df - report file system disk space usage
df [OPTION]... [FILE]...

-H 以1000為單位
-T 文件系統類型
-h: human-readable
-i:inodesinstead of blocks
-P: 以Posix兼容的格式輸出
[root@centos6 ~]#df -h
[root@centos6 ~]#df -H

wKiom1fGuH7zBpwfAACDcV-ONmc307.png

[root@centos6 ~]#df -i[root@centos6 ~]#df -T

wKioL1fGuI7wRQSFAACXCULjEvo723.png

du: 查看某目錄總體空間占用狀態

du [OPTION]... DIR
-h: human-readable
-s: summary
[root@centos6 ~]#du -h Music
/4.0K    Music/
[root@centos6 ~]#du -s Music
/4       Music/
  • 磁盤分區

fdisk

fdisk - Partition table manipulator for Linux

fdisk -l [-u] [device...]
子命令:    
    p 分區列表
    t 更改分區類型
    n 創建新分區
    d 刪除分區
    w 保存并退出    
    q 不保存并退出

添加一塊新硬盤:

[root@centos6 ~]#echo "- - -" > /sys/class/scsi_host/host2/scan  # 讓系統掃描硬盤

wKioL1fGuN7yAVIuAABuutxJpcU995.png

以柱面為單位:
[root@centos6 ~]#fdisk -l /dev/sda
以兼容的方式顯示:(compatible)
[root@centos6 ~]#fdisk -lc /dev/sda
以扇區為單位:
[root@centos6 ~]#fdisk -lcu /dev/sda

wKiom1fGuSXCvLK5AACzCY4FIX4959.png

wKiom1fGuT-jRBrvAAC7bm1u7Vc546.png

用fdisk給sdc劃分一個主分區,一個擴展分區,一個邏輯分區:

[root@centos6 ~]#fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x76fc3350.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n         # 創建一個新分區 
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 4    
First cylinder (655-2610, default 655): 
Using default value 655Last cylinder, +cylinders or +size{K,M,G} (655-2610, default 2610): +3G
Command (m for help): n
Command action
   l   logical (5 or over)   
   p   primary partition (1-4)
l
First cylinder (655-1047, default 655): 
Using default value 655Last cylinder, +cylinders or +size{K,M,G} (655-1047, default 1047): +3G
Command (m for help): p    # 查看當前分區

Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x76fc3350

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         654     5253223+  83  Linux
/dev/sdc4             655        1047     3156772+   5  Extended
/dev/sdc5             655        1047     3156741   83  Linux

Command (m for help): w  保存并退出 
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos6 ~]#

查看內核是否已經識別新的分區:

[root@centos6 ~]#cat /proc/partitions

wKiom1fGuy2joNS2AABqJFIr9B4285.png

如果未識別出,可同步分區表,即通知內核重新讀取硬盤分區表。

同步分區表:
CentOS 6
    partx-a /dev/DEVICE
    partx-d -n M:N /dev/DEVICE
CentOS 5 7 
    partprobe[/dev/DEVICE]

gdisk: 類fdisk 的GPT分區工具

gdisk - Interactive GUID partition table (GPT) manipulator

注意:gdisk沒有擴展分區邏輯分區的概述。

關于gfisk, 此處選擇在Cent OS 7環境:

[root@centos7 ~]#gdisk /dev/sde
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

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}: +5G
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): p
Disk /dev/sde: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): FF896BB7-557D-4230-8682-67E987F19722
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 31457213 sectors (15.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        10487807   5.0 GiB     8300  Linux filesystem

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}: 
Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}: +10G
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): p
Disk /dev/sde: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
heDisk identifier (GUID): FF896BB7-557D-4230-8682-67E987F19722
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 10485693 sectors (5.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        10487807   5.0 GiB     8300  Linux filesystem   
   2        10487808        31459327   10.0 GiB    8300  Linux filesystem

Command (? for help): w   

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTINGPARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sde.
The operation has completed successfully.
[root@centos7 ~]#

wKiom1fGvbnzlZq5AAAzvFvWlHo541.png

查看內核是否已經同步分區表:

[root@centos7 ~]#cat /proc/partitions |grep sde
   8       64   20971520 sde   
   8       65    5242880 sde1   
   8       66   10485760 sde2
[root@centos7 ~]#

parted:GNU組織開發的一款強大實時磁盤分區工具

parted - a partition manipulation program
parted [options] [device [command [options...]...]]

parted命令可以處理最常見的分區格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交換分區。

使用示例

parted /dev/sdbmklabelgpt|msdos
parted /dev/sdbprint
parted /dev/sdbmkpartprimary 1 200 (默認M)
parted /dev/sdbrm1
parted -l
[root@centos7 ~]#parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(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? y                                                                 
(parted) mkpart primary 1 20480   # 默認單位為M
(parted) mkpart primary 20480 60000  # 最好連續寫,不連續會提示你并自給給你連續
(parted) mkpart primary 60000 100000                                      
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags 
1      1049kB  20.5GB  20.5GB  ext4         primary 
2      20.5GB  60.0GB  39.5GB               primary 
3      60.0GB  100GB   40.0GB               primary

(parted) rm 2                                                             
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags 
1      1049kB  20.5GB  20.5GB  ext4         primary 
3      60.0GB  100GB   40.0GB               primary
(parted) q                                                                
Information: You may need to update /etc/fstab.
[root@centos7 ~]#

parted的操作都是實時生效的,小心使用!

wKioL1fGvzOAQr28AACdxyBMS4o015.png

  • 創建文件系統與編輯元數據

文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。

從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲并對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日志,壓縮,加密等。

文件系統類型Linux文件系統: 
ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
光盤:iso9660
Windows:fat32, ntfs
Unix: FFS(fast), UFS(unix), JFS2
網絡文件系統:NFS, CIFS
集群文件系統:GFS2, OCFS2(oracle)
分布式文件系統:ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未經處理或者未經格式化產生的文件系統

文件系統分類
根據其是否支持"journal"功能:
日志型文件系統: ext3, ext4, xfs, ...
非日志型文件系統: ext2, vfat

文件系統的組成部分:
內核中的模塊:ext4, xfs, vfat
用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虛擬文件系統:VFS
查前支持的文件系統:cat /proc/filesystems


么,為何Linux能夠支持如此眾多的文件系統呢?這是因為VFS(Virtual Filesystem
Switch),其作用就是采用標準的Unix系統調用讀寫位于不同物理介質上的不同文件系統,即為各類文件系統提供了一個統一的操作界面和應用編程接
口。VFS是一個可以讓open()、read()、write()等系統調用不用關心底層的存儲介質和文件系統類型就可以工作的粘合層。而Linux文
件系統對外的接口,任何要使用文件系統的程序都必須經由這層接口來使用它。

每一種類型的文件系統代碼都隱藏了實現的細節。因此,對于VFS層和內核的其它部分而言,每一種類型的文件系統看起來都是一樣的。

wKioL1fGwVzgRLhEAACro04S8H8726.png

接著來看我們的命令:

mke2fs
是ext系統文件系統專用管理工具,mkfs則可以調用相關的程序來創建文件系統,如etx系列, xfs, btrfs,
vfat,但其本身并不執行建立文件系統的工作,而是去調用相關程序;mkfs與mke2fs功能強大,還可以管理inode,
如為數據空間創建多個個inode, 一個inode指向數據空間的多少字節,還可以開啟或禁用某些文件系統的特性,如日志功能等。

mke2fs命令小結:

mke2fs:ext系列文件系統專用管理工具
-t {ext2|ext3|ext4}-b {1024|2048|4096}  # 指定數據塊的大小 
-j: 相當于-t ext3mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 為數據空間中每多少個字節創建一個inode;此大小不應該小于block的大小
-N #:為數據空間創建個多少個inode-I 一個inode記錄大小128---4096   # 指定節點記錄的大小 
-m #: 默認5%,為管理人員預留空間占總空間的百分比
-O FEATURE[,...]:啟用指定特性
-O ^FEATURE:關閉指定特性

其中-b 用來指定數據塊的大小,-I 用來指定節點記錄的大小,超級塊與inode tabel 的關系也下圖所示:

wKioL1fGwa-wx4bkAAEGdPyHXkA767.png

mkfs命令小結:

mkfs命令:
(1) # mkfs.FS_TYPE/dev/DEVICEext4
xfs
btrfs
vfat
(2) # mkfs-t FS_TYPE /dev/DEVICE-L 'LABEL': 設定卷標

注意:mkfs命令也可以修改元數據,譬如塊大小與inode,即mke2fs的功能選項mkfs命令通常也通用!

查看與編輯元數據:tune2fs, dumpe2fs

tune2fs:重新設定ext系列文件系統可調整參數的值
-l:查看指定文件系統超級塊信息;super block
-L 'LABEL':修改卷標-m #:修預留給管理員的空間百分比
-j: 將ext2升級為ext3
-O: 文件系統屬性啟用或禁用,–O ^has_journal
-o: 調整文件系統的默認掛載選項,–o ^acl
-U UUID: 修改UUID號

dumpe2fs:
-h:查看超級塊信息(分組信息),分區用分組管理

使用示例

[root@centos7 ~]#mkfs.ext4 /dev/sdb1
[root@centos7 ~]#mke2fs -j /dev/sdb3   # mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
[root@centos7 ~]#blkid /dev/sdb1
/dev/sdb1: UUID="71b05248-a5a7-4532-bd41-67d7b062e8e5" TYPE="ext4" 
PARTLABEL="primary" PARTUUID="0020ea01-ab53-487a-ad09-01c075383e74" 
[root@centos7 ~]# 
[root@centos7 ~]#blkid /dev/sdb3    
/dev/sdb3: UUID="e67d9e57-7d62-417d-a43f-e57c6e3c45f8" SEC_TYPE="ext2" TYPE="ext3" 
PARTLABEL="primary" PARTUUID="aaf54c4d-595b-4e6a-9657-ab0eb4b91c61" 
[root@centos7 ~]#

wKiom1fGwvLQYskzAADI4_HQIK8482.png

[root@centos7 ~]#tune2fs -l /dev/sdb1  查看sdb1的超級塊信息

wKioL1fGwwqSrwJKAADoxwA9NfY709.png

wKiom1fGwx-S_vLUAAB3U4Sn8I0535.png

wKioL1fGwzLgY2kmAADT2PUso7s319.png

其中,Reserved block count:是指保留的塊,其是預留給管理員與管理員組的!

Reserved block count
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
[root@centos7 ~]#mkfs.ext4 -I 256 /dev/sdb1  # 創建文件系統時指定inode大小

wKioL1fGw23iZCmsAABiAOiNRY8597.png

[root@centos7 ~]#mkfs.ext4 -N 512000 /dev/sdb1 # 創建文件系統時指定inode數量

wKioL1fGw4Gwpi1KAAAmf2wGwhs900.png

[root@centos7 ~]#mkfs.ext4 -i 10240 /dev/sdb1 
# 創建文件系統時指定一個inode所消耗的數據塊大小, 此值越大,inode計數越小,即inode所占用的空間越小。

[root@centos7 ~]#mkfs.ext4 -m 1 /dev/sdb1  
# 創建文件系統時指定預留空間占總空間的百分比,此處為1%.

wKiom1fGw6jRgXxrAAAlO02Axsw277.png

當然,好些元數據信息在創建好文件系統之后也可以利用tune2fs來調整:

[root@centos7 ~]#tune2fs -m 1 /dev/sdc1  # 調整預留空間占比
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 1% (7864 blocks)
[root@centos7 ~]#
[root@centos7 ~]#tune2fs -m 0 /dev/sdc1
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 0% (0 blocks)
[root@centos7 ~]#
[root@centos7 ~]#mke2fs -L /mnt/sdb1 /dev/sdb1 # 創建文件系統時指定卷標,建議卷標為掛載點

wKioL1fGw_6D517AAABCjzjlNSE476.png

  • 磁盤的掛載與修復

關于掛載:

掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為

把設備關聯掛載點:mount Point,掛載點下原有文件在掛載完成后會被臨時隱藏,掛載點目錄一般為空

卸載時:為解除此關聯關系的過程,可使用設備,也可以使用掛載點

我們用卷標的管理來引入掛載,e2label:

e2label - Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]
[root@centos7 ~]#e2label /dev/sdb1/mnt/sdb1
[root@centos7 ~]#
[root@centos7 ~]#e2label /dev/sdb1 /mnt/liansir
[root@centos7 ~]#tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   /mnt/liansir
[root@centos7 ~]#blkid /dev/sdb1
/dev/sdb1: LABEL="/mnt/liansir" UUID="14167f80-eedd-4770-8bbe-000d2e073e19" TYPE="ext2" 
PARTLABEL="primary" PARTUUID="0020ea01-ab53-487a-ad09-01c075383e74"
[root@centos7 ~]#tune2fs -j /dev/sdb1  # 將ext2升級為ext3
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: done
[root@centos7 ~]#blkid /dev/sdb1     
/dev/sdb1: LABEL="/mnt/liansir" UUID="14167f80-eedd-4770-8bbe-000d2e073e19" SEC_TYPE="ext2" TYPE="ext3" 
PARTLABEL="primary" PARTUUID="0020ea01-ab53-487a-ad09-01c075383e74" 
[root@centos7 ~]#

wKiom1fGxGnxD1wJAACykempKbc191.png

而CentOS 6默認掛載選項與什么時候創建文件系統相關:

wKiom1fGxIGALslKAACpJnyx8iU811.png

wKioL1fGxJKzWsNYAACI0AbiQaQ531.png

于是,如果將sdb1掛載到某一掛載點,并創建一個文件,在給此文件設置acl功能時卻提示不支持此操作:

[root@centos6 ~]#mkdir /mnt/sdb1
[root@centos6 ~]#mount /dev/sdb1 /mnt/sdb1
[root@centos6 ~]#cd /mnt/sdb1
[root@centos6 /mnt/sdb1]#touch f1
[root@centos6 /mnt/sdb1]#setfacl -m u:liansir:rw 
f1setfacl: f1: Operation not supported
[root@centos6 /mnt/sdb1]#

小結:centos 6 手動分區格式化ext,默認沒有acl功能,而centos 7默認就有。

[root@centos6 ~]#tune2fs -o acl /dev/sdb1  # 開啟文件系統的alc特性
tune2fs 1.41.12 (17-May-2010)
[root@centos6 ~]#
[root@centos6 ~]#umount /mnt/sdb1   # 先卸載
[root@centos6 ~]#mount /dev/sdb1 /mnt/sdb1
[root@centos6 ~]#cd /mnt/sdb1
[root@centos6 /mnt/sdb1]#setfacl -m u:liansir:rw f1
[root@centos6 /mnt/sdb1]#ll 
f1-rw-rw-r--+ 1 root root 0 Aug 28 11:29 f1
[root@centos6 /mnt/sdb1]#
[root@centos6 /mnt/sdb1]#tune2fs -o ^acl /dev/sdb1  # 禁用文件系統的acl特性        
tune2fs 1.41.12 (17-May-2010)
[root@centos6 /mnt/sdb1]#

破壞與修復超級塊信息:

[root@centos6 ~]#dd if=/dev/zero of=/dev/sdb1 bs=1M count=10  # 破壞
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0640596 s, 164 MB/s
[root@centos6 ~]#dumpe2fs /dev/sdb1  # 查看
dumpe2fs 1.41.12 (17-May-2010)dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb1
Couldn't find valid filesystem superblock.
[root@centos6 ~]#
[root@centos6 ~]#fsck -y /dev/sdb1  # 修復時如果不指定文件系統類型則會自動識別
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)fsck.ext2: Superblock invalid, trying backup blocks...
Superblock has an invalid journal (inode 8).
Clear? yes
[root@centos6 ~]#tune2fs -l /dev/sdb1  # 查看文件系統狀態是否為clean
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /mnt/sdb1
Filesystem UUID:          7ba2398a-3ac0-4db9-901e-d4d0987aaabc
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean

至此,我們需要詳細了解下mount與dd這兩個命令的用法:

掛載方法:mount DEVICE MOUNT_POINT
mount:通過查看/etc/mtab文件顯示當前已掛載的所有設備
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要掛載的設備;
(1) 設備文件:例如/dev/sda5
(2) 卷標:-L 'LABEL', 例如-L 'MYDATA'
(3) UUID, -U 'UUID':例如-U '0c50523c-43f1-45e7-85c0-a126711d406e'
(4) 偽文件系統名稱:proc, sysfs, devtmpfs, configfs
dir:掛載點
事先存在;建議使用空目錄
進程正在使用中的設備無法被卸載

mount命令常用選項

  1. -t vsftype: 指定要掛載的設備上的文件系統類型

  2. -r: readonly,只讀掛載

  3. -w: read and write, 讀寫掛載

  4. -n: 不更新/etc/mtab,相當于#mount

  5. -a: 自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能)

  6. -L 'LABEL': 以卷標指定掛載設備

  7. -U 'UUID': 以UUID指定要掛載的設備

  8. -B,–bind: 綁定目錄到另一個目錄上

查看內核追蹤到的已掛載的所有設備: cat /proc/mounts

另外,mount還有一個強大的-o選項集:-o options:(掛載文件系統的選項),多個選項使用逗號分隔

  1. async: 異步模式

  2. sync: 同步模式,內存更改時,同時寫磁盤

  3. atime/noatime: 包含目錄和文件

  4. diratime/nodiratime: 目錄的訪問時間戳

  5. auto/noauto: 是否支持自動掛載,是否支持-a選項

  6. exec/noexec: 是否支持將文件系統上運行應用程序

  7. dev/nodev: 是否支持在此文件系統上使用設備文件

  8. suid/nosuid: 不否支持suid和sgid權限 9 remount: 重新掛載

  9. ro: 只讀

  10. rw: 讀寫

  11. user/nouser: 是否允許普通用戶掛載此設備,默認管理員才能掛載

  12. acl: 啟用此文件系統上的acl功能

  13. Defaults: 相當于rw, nosuid, dev, exec, auto, nouser, async

還有以下常用配合命令:

查看掛載情況:
findmnt MOUNT_POINT

查看正在訪問指定文件系統的進程:
lsof MOUNT_POINT
fuser -v MOUNT_POINT

終止所有在正訪問指定的文件系統的進程:
fuser -km MOUNT_POINT  # 注意別干掉根的進程,否則只能重啟,fuser -km / 卸載:
umount DEVICE
umount MOUNT_POINT

mount的掛載動作在系統重啟后失效,要想永久生效,則要寫入其配置文件:/etc/fstab

/etc/fstab: 每行定義一個要掛載的文件系統

wKioL1fGxYWCr2HTAADi5wFBe7g041.png

止戰

2016.8.29

原創文章,作者:Liansir,如若轉載,請注明出處:http://www.www58058.com/42515

(0)
LiansirLiansir
上一篇 2016-09-01 08:49
下一篇 2016-09-01 08:49

相關推薦

  • 一起學習吧:SDCC 2017即將在上海共話架構、數據和運維!

    2017活動家邀你一起學習吧!SDCC 2017在上海共話架構、數據和運維,還有兩天!【召開時間為:3月17至3月19日】 在互聯網大潮下,2017年的就業環境越發惡劣,技術人如何去適應技術變革和學習新技術,以及如何快速增強自身的技術實力成為亟需解決的問題。如果你在看完一本技術圖書后還是疑惑不解,處于目前項目遇到困難時無人請教的尷尬境地,亦不清楚業界同行在使…

    2017-03-15
  • linux系統啟動流程及內核編譯

    Linux系統啟動流程 initialization [??n???la?'ze??n] 初始化 內核參數: /usr/share/doc/kernel-doc-VERSION/Documentation 系統初始化流程(內核級別): POST –> BootSequence(BIOS) –> BootLoade…

    Linux干貨 2016-09-19
  • 馬哥教育網絡班21期+第10周課程練習

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)     1)開機后會進行POST(開機加電自檢),加載BIOS,之后會根據BIOS上的boot  sequence(引導加載次序)找到第一個有引導程序的設備,找到MBR,bootloader(引導加載器)就安裝在MBR內。M…

    Linux干貨 2016-09-19
  • Linux命令幫助文檔的使用及簡單命令使用-2016-7-25

    Linux命令幫助文檔的使用   相關命令 whatis    COMMAND –help    man and info 本地幫助文檔/usr/share/doc   在使用系統內建的幫助文檔之前,我們需要了解需要命令幫助是否是內部命令和外部命令…

    Linux干貨 2016-08-04
  • ansible部分功能詳解

    一. 架構: 組成     ansible core:     modules:     Core Module     Custom Module   Host Inventory: 主機清單       File   &nbs…

    Linux干貨 2016-11-11

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-01 13:21

    有圖有文,每個練習結果均有圖證,看得出其中的認真程度,贊

欧美性久久久久