該系列文章只是本人的學習筆記,文章中的文字描述提取自《Linux鳥哥私房菜》《Linux運維之道》等書中的重點內容,化繁為簡能夠在工作中快速復習掌握重點,並不代表個人立場,但轉載請加出處,並注明參考文獻。
Linux最傳統的磁盤文件系統(filesystem)使用的是EXT4格式,所以要了解文件系統就得要由認識EXT4開始,而文件系統是創建在硬盤上面的,因此我們得了解硬盤的物理組成才行,下面我們回來詳細談一談磁盤,inode,block還有superblock等文件系統,的理論知識.
關於磁盤與分區
目前在市場中磁盤的分類也是五花八門,一般在主機中使用的磁盤無外乎,以下幾種,包括常用的構造,我們在這里說明.
接口分類:IDE、SATA、SCSI、SAS、光纖通道接口等
構造分類:機械硬盤(HDD)、固態硬盤(SSD)、混合硬盤(HHD)
制造廠商:希捷、西部數據、東芝、三星、英特爾、閃迪
尺寸大小:3.5英寸、2.5 英寸、1.8英寸、1.3/1.0/0.85英寸
磁盤的常用參數,有以下幾種形式:
容量:MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB
轉速:台式機(7200rpm)、筆記本(5400rpm)、服務器(10000rpm,15000rpm)
傳輸速度: STAT3(500M/s)、SCSI(320M/s)、SAS(500M/s)、PCI-E(1200M/s)
緩存:硬盤控制器的內存芯片,內部存儲和接口的緩存
接下來我們在說明一下磁盤的物理組成,整個磁盤的組成主要有:
● 圓形的盤片(主要記錄數據的部分)
● 機械手臂與手臂上的磁頭(用來讀寫盤片上的數據)
● 主軸馬達,可以轉動盤片,讓機械臂在盤片上都寫
從上面我們知道數據儲存與讀取的重點在於磁盤的盤片,而盤片上的物理組成則為,以下構造:
● 扇區(Sector):為最小的物理存儲單位,每個扇區為512bytes
● 柱面(Cylinder):將扇區組成一個圓就是柱面,柱面是分區(partition)的最小單位
● 第一個扇區最重要,里面記錄着硬盤主引導記錄(MBR)以及分區表(PT),其中MBR占446bytes,而PT則占用64bytes
所謂的磁盤分區指的是告訴操作系統 『我這塊磁盤在此分區可以訪問的區域是,由A柱面到B柱面之間的塊』,如此一來操作系統就能夠知道,他可以在所指定的區塊內進行文件數據的讀/寫/查找等操作,也就是說,磁盤分區意即指定分區的起始於結束柱面就可以.
因為分區表僅有64bytes而已,因此最多只能記錄四條分區的記錄,這四條分區記錄我們稱為主分區(primary)或擴展分區(extended),其中擴展分區還可以再分出邏輯分區(logical),而能被格式化的則僅有主分區和邏輯分區.
最后我們再把分區的定義拿出來說明一下:
1.主分區與擴展分區最對可以有4個(硬盤限制)
2.擴展分區最多只有一個(操作系統的限制)
3.邏輯分區是由擴展分區持續分出來的分區
4.只有邏輯分區能被格式化,擴展分區無法格式化
5.邏輯分區在Linux系統中,IDE硬盤最多59個,SATA硬盤最多11個
關於文件系統的特性
我們都知道磁盤分區完畢后還需要進行格式化(format),之后操作系統才能夠使用這個分區,為什么需要進行『格式化』呢? 這是因為每種操作系統所配置的文件屬性/權限並不相同,為了存放這些文件所需的數據,因此就需要將分區進行格式化,以成為操作系統能夠利用的『文件系統格式(filesystem)』.
那么文件系統是如何運行的呢? 這與操作系統的文件數據有關,較新的操作系統的文件數據除了文件實際內容外,通常含有非常多的屬性,例如 Linux 操作系統的文件權限(rwx)與文件屬性(擁有者、群組、時間參數等),文件系統通常會將這兩部份的數據分別存放在不同的區塊,權限與屬性放置到 inode 中,至於實際數據則放置到 data block 區塊中,另外,還有一個超級區塊 (superblock) 會記錄整個文件系統的整體信息,包括 inode 與 block 的總量、使用量、剩余量等.
superblock:記錄此文件系統的整體信息,包括inode/block的總量、使用量、剩余量,以及文件系統的格式與相關信息等
inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的 block 號碼
block:實際記錄文件的內容,若文件太大時,會占用多個 block
由於每個 inode 與 block 都有編號,而每個文件都會占用一個 inode,inode 內則有文件數據放置的 block 號,因此我們可以知道的是,如果能夠找到文件的 inode 的話,那么自然就會知道這個文件所放置數據的 block 號,當然也就能夠讀出該文件的實際數據了,這是個比較有效率的作法,因為如此一來我們的磁盤就能夠在短時間內讀取出全部的數據,讀寫的效率非常好.
data block 真正存儲數據的地方
data block 是用來放置文件內容數據地方,在 Ext4 文件系統中所支持的 block 大小有 1K, 2K 及 4K 三種而已,在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode 的記錄,不過要注意的是,由於 block 大小的差異,會導致該文件系統能夠支持的最大磁盤容量與最大單一文件容量並不相同。,因為 block 大小而產生的 Ext4 文件系統限制如下:
Block大小 1KB 2KB 4KB
最大單一文件限制 16GB 256GB 2TB
最大文件系統總容量 2TB 8TB 16TB
除此之外 Ext4 文件系統的 block 還有什么限制呢? 有的!基本限制如下:
● 原則上block的大小與數量在格式化完就不能夠再改變了(除非重新格式化)
● 每個block內最多只能夠放置一個文件的數據
● 承上如果文件大於block的大小則一個文件會占用多個 block 數量
● 承上若文件小於block則該block的剩余容量就不能夠再被使用了(磁盤空間會浪費)
Superblock 超級塊記錄
Superblock 是記錄整個文件系統分配的地方,沒有 Superblock 就沒有這個文件系統了,他記錄的信息主要有:
● block 與 inode 的總量
● 未使用與已使用的 inode / block 數量
● block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes)
● 文件系統的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤 (fsck) 的時間等文件系統的相關信息
● 一個 valid bit 數值若此文件系統已被掛載,則 valid bit 為 0 若未被掛載則 valid bit 為 1
Superblock 是非常重要的,因為我們這個文件系統的基本信息都寫在這里,因此如果 superblock 死掉了,你的文件系統可能就需要花費很多時間去挽救,一般來說 superblock 的大小為 1024bytes.
關於主引導記錄的解釋
主引導記錄(MBR,Main Boot Record)是位於磁盤最前邊的一段引導(Loader)代碼,它負責磁盤操作系統(DOS)對磁盤進行讀寫時分區合法性的判別、分區引導信息的定位,它由磁盤操作系統(DOS)在對硬盤進行初始化時產生的.
主引導記錄在磁盤最前邊的一段引導代碼,占用了磁盤的第一個分區,結構為:
● 主引導程序(boot loader)占用了446byte
● 分區表(Partition table)占用了64byte
● 有效標志符(magic number)占用了2byte(55AAH代表有效)
主引導扇區的讀取流程是 ?
● BIOS 加電自檢 ( Power On Self Test -- POST )BIOS執行內存地址的跳轉指令,跳轉到固化在ROM中的自檢程序,對系統硬件(包括內存)進行檢查
● 讀取主引導記錄(MBR),當BIOS檢查到硬件正常並與 CMOS 中的設置相符后,按照 CMOS 中對啟動設備的設置順序檢測可用的啟動設備,BIOS將相應啟動設備的第一個扇區(也就是MBR扇區)讀入內存
● 檢查MBR的結束標志位是否等於55AAH,若不等於則轉去嘗試其他啟動設備,如果沒有啟動設備滿足要求則顯示“NO ROM BASIC”然后死機
● 當檢測到有啟動設備滿足要求后,BIOS將控制權交給相應啟動設備,啟動設備的MBR將自己復制到0000:0600H處,然后繼續執行
● 根據MBR中的引導代碼啟動引導程序,進入下一個引導環節
關於MBR分區表的介紹
主引導記錄(Master Boot Record,縮寫:MBR)又叫做主引導扇區,是計算機開機后訪問硬盤時所必須要讀取的首個扇區,它在硬盤上的三維地址為(柱面,磁頭,扇區)=(0,0,1).
MBR是由分區程序(如Fdisk,Parted)所產生的,它不依賴任何操作系統,而且硬盤引導程序也是可以改變的,從而能夠實現多系統引導.
從主引導記錄的結構可以知道,它僅僅包含一個64個字節的硬盤分區表,由於每個分區信息需要16個字節,所以對於采用MBR型分區結構的硬盤(其磁盤卷標類型為MS-DOS),最多只能識別4個主要分區,所以對於一個采用此種分區結構的硬盤來說,想要得到4個以上的主要分區是不可能的,這里就需要引出擴展分區了,擴展分區也是主分區(Primary partition)的一種,但它與主分區的不同在於理論上可以划分為無數個邏輯分區,每一個邏輯分區都有一個和MBR結構類似的擴展引導記錄(EBR),在MBR分區表中最多4個主分區或者3個主分區+1個擴展分區,也就是說擴展分區只能有一個,然后可以再細分為多個邏輯分區.
在Linux系統中,硬盤分區命名為sda1-sda4或者hda1-hda4(其中a表示硬盤編號可能是a、b、c等等),在MBR硬盤中,分區號1-4是主分區(或者擴展分區),邏輯分區號只能從5開始.
在MBR分區表中,一個分區最大的容量為2T,且每個分區的起始柱面必須在這個disk的前2T內,你有一個3T的硬盤,根據要求你至少要把它划分為2個分區,且最后一個分區的起始扇區要位於硬盤的前2T空間內,如果硬盤太大則必須改用GPT.
關於GPT分區表的介紹
全局唯一標識分區表(GUID Partition Table,縮寫:GPT)是一個實體硬盤的分區結構,它是EFI(可擴展固件接口標准)的一部分,用來替代BIOS中的主引導記錄分區表,但因為MBR分區表不支持容量大於2.2TB(2.2 × 1012字節)的分區,所以也有一些BIOS系統為了支持大容量硬盤而用GPT分區表取代MBR分區表.
在MBR硬盤中,分區信息直接存儲於主引導記錄(MBR)中(主引導記錄中還存儲着系統的引導程序),但在GPT硬盤中,分區表的位置信息儲存在GPT頭中,但出於兼容性考慮,硬盤的第一個扇區仍然用作MBR,之后才是GPT頭.
與支持最大卷為2 TB(Terabytes)並且每個磁盤最多有4個主分區(或3個主分區,1個擴展分區和無限制的邏輯驅動器)的MBR磁盤分區的樣式相比,GPT磁盤分區樣式支持最大卷為18 EB(Exabytes)(1EB=1048576TB)並且每磁盤的分區數沒有上限,只受到操作系統限制(由於分區表本身需要占用一定空間,最初規划硬盤分區時,留給分區表的空間決定了最多可以有多少個分區,IA-64版Windows限制最多有128個分區,這也是EFI標准規定的分區表的最小尺寸),與MBR分區的磁盤不同,至關重要的平台操作數據位於分區,而不是位於非分區或隱藏扇區.另外,GPT分區磁盤有備份分區表來提高分區數據結構的完整性.
其中轉換為GPT的時候可以創建兩個隱藏分區,ESP和MSR.ESP是efi系統分區用於保存引導文件,MSR是微軟的保留分區,用於安裝操作系統.
MBR與GPT,兩種分區的小總結
-
MBR分區表:Master Boot Record,即硬盤主引導記錄分區表,只支持容量在 2.1TB 以下的硬盤,超過2.1TB的硬盤只能管理2.1TB,最多只支持4個主分區或三個主分區和一個擴展分區,擴展分區下可以有多個邏輯分區。
-
GPT分區表:GPT,全局唯一標識分區表(GUID Partition Table),與MBR最大4個分區表項的限制相比,GPT對分區數量沒有限制,但Windows最大僅支持128個GPT分區,GPT可管理硬盤大小達到了18EB。只有基於UEFI平台的主板才支持GPT分區引導啟動。
-
GPT分區表下的隱藏分區:
①. ESP分區:EFI system partition,該分區用於采用了EFI BIOS的電腦系統,用來啟動操作系統。分區內存放引導管理程序、驅動程序、系統維護工具等。如果電腦采用了EFI系統,或當前磁盤用於在EFI平台上啟動操作系統,則應建議ESP分區。
②. MSR分區:即微軟保留分區,是GPT磁盤上用於保留空間以備用的分區,例如在將磁盤轉換為動態磁盤時需要使用這些分區空間。
- 兩種硬盤分區模式分別對應的BIOS啟動方式:
硬盤分區格式為MBR格式,啟動模式應該為Legacy;
硬盤分區格式為GUID(GPT)格式,啟動模式應該為UEFI。
- MBR分區表的構成:
⦁主引導程序(boot loader)占用了446byte
⦁分區表(Partition table)占用了64byte
⦁有效標志符(magic number)占用了2byte(55AAH代表有效)
- GPT分區表的構成:
⦁LBA 0 :GPT分區的最開頭,考慮兼容性問題,開頭仍然存放MBR分區表,只是里面存放的是指向GPT的指針。防止有一些系統不識別GPT分區表。
⦁LBA 1 :存儲了硬盤的總存儲空間,以及GPT分區表的信息,定義最多能創建128個分區,每個分信息占用的空間是128字節;128個分區中有一個是用來存儲備份分區表的,所以可以手動指定的分區數為127個分區。
⦁LBA 2-33:每個分區信息存放的位置,上邊說了每個分信息占用的空間是128字節。2-33正好是32個扇區。32*512=16384,每個分區信息占用了128字節,16384/128=128個分區。
磁盤管理命令
◆dumpe2fs 查詢磁盤參數◆
dumpe2fs命令用於打印 ext2/ext3/ext4 文件系統的超級塊和塊組信息,其實它可以查詢磁盤的很多參數,下面我們先來看一下它的具體參數吧.
[root@localhost ~]# dumpe2fs --help
命令語法:[ dumpe2fs [選項] 磁盤路徑 ]
-b #打印文件系統中預留的塊信息
-h #僅顯示超級塊信息
-i #從指定的文件系統映像文件中讀取文件系統信息
-x #以16進制格式打印信息塊成員
-ob 超級塊 #指定檢查文件系統時使用的超級塊
-OB 塊大小 #檢查文件系統時使用的指定的塊大小
實例:通過dumpe2fs -h
顯示指定/dev/sdb
分區的詳細參數
[root@localhost ~]# dumpe2fs -h /dev/sdb
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none> #文件分區的名字(Label)
Last mounted on: <not available>
Filesystem UUID: 5dc23dc0-8245-4113-b40a-4cb09ad9f4de #文件系統的UUID
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl #默認掛載的參數
Filesystem state: clean #這個文件系統是沒有問題的(clean)
Errors behavior: Continue
Filesystem OS type: Linux #文件系統類型是Linux
Inode count: 1310720 #Inode的總數
Block count: 5242880 #Block的總數
Reserved block count: 262144
Free blocks: 5116558 #剩余Blocks數量
Free inodes: 1310709 #剩余Inodes數量
First block: 0
Block size: 4096 #每個Block塊的大小
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Sun Nov 18 08:59:48 2018
Last mount time: Sun Nov 18 08:59:59 2018
Last write time: Sun Nov 18 08:59:59 2018
Mount count: 1
Maximum mount count: -1
Last checked: Sun Nov 18 08:59:48 2018
Check interval: 0 (<none>)
Lifetime writes: 132 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256 #每個Inodes塊的大小
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: f00ad08a-e990-4c45-96c3-749116a4e540
Journal backup: inode blocks
Journal features: journal_64bit
Journal size: 128M
Journal length: 32768
Journal sequence: 0x00000002
Journal start: 1
◆df 查詢磁盤信息◆
df命令用於顯示磁盤分區上的可使用的磁盤空間,默認顯示單位為KB,可以利用該命令來獲取硬盤被占用了多少空間,目前還剩下多少空間等信息,下面我們先來看一下它的具體參數吧.
[root@localhost ~]# df --help
命令語法:[ df [選項] ]
-a #列出所有的文件系統,包括/proc等系統
-k #以KB為單位,顯示各文件系統
-m #以MB為單位,顯示各文件系統
-h #以常用單位顯示文件系統大小
-H #以M=1000替代M=1024顯示數據
-T #顯示文件系統類型
-i #不用硬盤容量,以Inode數量來顯示
實例:以通用格式顯示系統文件信息.
[root@localhost ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/rhel-root xfs 17G 1.2G 16G 7% /
devtmpfs devtmpfs 98M 0 98M 0% /dev
tmpfs tmpfs 110M 0 110M 0% /dev/shm
tmpfs tmpfs 110M 5.5M 104M 6% /run
tmpfs tmpfs 110M 0 110M 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.4G 4.4G 0 100% /mnt
/dev/sda1 xfs 1014M 130M 885M 13% /boot
tmpfs tmpfs 22M 0 22M 0% /run/user/0
/dev/sdb ext4 20G 45M 19G 1% /lyshark
◆du 統計文件大小◆
du命令也是查看使用空間的,但是與df命令不同的是Linux,du命令是對文件和目錄磁盤使用的空間的查看,還是和df命令有一些區別的,下面我們先來看一下它的具體參數吧.
[root@localhost ~]# du --help
命令語法:[ du [選項] 文件或目錄 ]
-a #列出所有的文件與目錄容量
-h #以常用單位顯示容量信息
-s #只列出總容量,而不統計每個個別目錄占用容量
-S #不包括子目錄下的總計,區別於 -s
-m #以MB為單位顯示
-k #以KB為單位顯示
實例:通過du -sh
顯示目錄的總容量.
[root@localhost ~]# du -sh /etc/
31M /etc/
[root@localhost ~]# du -sh /usr/bin/
63M /usr/bin/
◆lsblk 查所有可用設備◆
lsblk命令用於列出所有可用塊設備的信息,而且還能顯示他們之間的依賴關系,但是它不會列出RAM盤的信息,塊設備有硬盤,閃存盤,cd-ROM等,lsblk命令包含在util-linux-ng包中,現在該包改名為util-linux,這個包帶了幾個其它工具,如dmesg,要安裝lsblk,請使用 yum install util-linux-ng 來安裝,下面我們先來看一下它的具體參數吧.
[root@localhost ~]# lsblk --hlep
命令語法:[ lsblk [選項] ]
-a #顯示所有設備
-m #顯示權限信息
-l #使用列表格式顯示
-n #不顯示標題
-o 列名 #輸出指定列
-P #以鍵和值的方式顯示
-t #使用拓展格式輸出
-r #使用原始格式輸出
實例:使用lsblk -t
顯示磁盤信息
[root@localhost ~]# lsblk -t
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME
sda 0 512 0 512 512 1 deadline 128 4096 32M
├─sda1 0 512 0 512 512 1 deadline 128 4096 32M
└─sda2 0 512 0 512 512 1 deadline 128 4096 32M
├─rhel-root 0 512 0 512 512 1 128 4096 32M
└─rhel-swap 0 512 0 512 512 1 128 4096 32M
sdb 0 512 0 512 512 1 deadline 128 4096 0B
sr0 0 2048 0 2048 2048 1 deadline 128 128 0B
◆e2label 設置卷標名◆
e2label命令用來設置第二擴展文件系統的卷標,此命令無參數,下面直接看一下使用技巧.
[root@localhost ~]# dumpe2fs -h /dev/sdb |grep "Filesystem volume name"
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none>
[root@localhost ~]# e2label /dev/sdb "lyshark desk"
[root@localhost ~]# dumpe2fs -h /dev/sdb |grep "Filesystem volume name"
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: lyshark desk
◆fsck 檢查修復文件系統◆
fsck命令被用於檢查並且試圖修復文件系統中的錯誤,當文件系統發生錯誤,可用fsck指令嘗試加以修復.
[root@localhost ~]# fsck --help
命令語法:[ fsck [選項] 磁盤路徑 ]
-a #自動修復文件系統,不詢問
-A #依照/etc/fstab配置文件的內容,檢查文件內所列的全部文件系統
-t 類型 #指定檢查文件系統類型
-V #顯示指令執行過程
實例:檢查並修復一個文件系統,應該先卸載在檢查.
[root@localhost ~]# fsck -t ext4 -a /dev/sdb
fsck from util-linux 2.23.2
lyshark_desk: clean, 11/1310720 files, 126322/5242880 blocks
◆mkfs 格式化◆
mkfs命令用於在設備上(通常為硬盤)創建Linux文件系統,mkfs本身並不執行建立文件系統的工作,而是去調用相關的程序來執行,下面我們先來看一下它的具體參數吧.
[root@localhost ~]# mkfs -help
命令語法:[ mkfs [文件類型] 磁盤路徑 ]
-t ext2 #格式化為ext2
-t ext3 #格式化為ext3
-t ext4 #格式化為ext4
[root@localhost ~]# mkfs.
mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
xfs_group
實例:格式化一個分區,試一下.
[root@localhost ~]# mkfs -t ext4 /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
◆mount/umount 掛載與卸載磁盤◆
mount命令用於加載文件系統到指定的加載點,此命令的最常用於掛載cdrom,使我們可以訪問cdrom中的數據,因為你將光盤插入cdrom中,Linux並不會自動掛載,必須使用Linux mount命令來手動完成掛載,下面老樣子先看參數.
[root@localhost ~]# mount --help
命令語法:[ mount [選項] [原盤符] [掛載到] ]
-t ext2 #格式化為ext2
-a #根據/etc/fstab配置,重新掛載一遍
-l #顯示已掛載文件系統列表
-t #指定掛載類型(ext2/ext3/vfat/reiserfs/iso9660)
-L #通過文件系統的卷標名稱進行掛載
-r #將文件系統加載為只讀模式
-v #輸出指令執行詳細信息
-o #指定額外掛載參數(ro,rw只讀讀寫/exec,noexec是否可執行/remount 重新掛載)
實例1: 掛載光盤 /dev/sr0 掛載到 /mnt 目錄下
[root@localhost ~]# mount -t iso9660 /dev/sr0 /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
實例2: 掛載硬盤,掛載時指定語系為 iocharset=cp950 掛載到 /mnt/flash
[root@localhost ~]# mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash
實例3: 將根分區重新掛載,並加上讀寫權限
[root@localhost ~]# mount -o remount,rw,auto /
實例4: 將/home這個目錄,臨時掛載到/tmp/home下
[root@localhost ~]# mount --bind /home/ /tmp/home/
[root@localhost ~]# ll /tmp/home/
實例5: 利用卷標名來掛載
[root@localhost home]# mount -L "LyShark_Disk" /tmp/disk/
實例6: 掛載一個ISO鏡像,例如Centos.iso
[root@localhost ~]# mount -o loop /root/Centos.iso /mnt/centos_dvd
實例7: 卸載磁盤或任意外部介質
[root@localhost home]# umount -v /dev/sr0
umount: /mnt (/dev/sr0) unmounted
磁盤分區命令-Fdisk
fdisk命令用於觀察硬盤實體使用情況,也可對硬盤分區,它采用傳統的問答式界面,而非類似DOS fdisk的cfdisk互動式操作界面,因此在使用上較為不便,但功能卻絲毫不打折扣.
◆命令參數解釋◆
[root@localhost ~]# fdisk -l #查看系統所有硬盤及分區
[root@localhost ~]# fdisk 磁盤設備名(/dev/sda) #創建或修改磁盤的分區結構
[root@localhost ~]# fdisk /dev/sd*
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): help
h: unknown command
Command action
p:打印分區表
n:新建一個新分區
d:刪除一個分區
t:更改分區類型(82=交換分區)
m:輸出菜單
q:退出不保存
w:把分區寫進分區表,保存並退出
Command (m for help):
注:若報錯Device or resource busy. The kernel still uses the old table.The new table will be used at the next reboot。則需要重啟系統,重新加載硬盤,才能進一步操作。
partprobe 強制讀取所有分區
⦁當出現上述情況時,也可不必重啟,問題導致原因為內核正在使用分區表,那么我們可以是用partprobe強制讀取所有分區達到不需要重啟從而解決設備占用的問題。
命令沒有請安裝:parted-2.*-*-*.rpm
◆fdisk 分區實例◆
1.查看磁盤,查看是否有新的磁盤且沒有被格式化的.
[root@localhost ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 Sep 21 07:26 /dev/sda
brw-rw---- 1 root disk 8, 1 Sep 21 07:26 /dev/sda1
brw-rw---- 1 root disk 8, 2 Sep 21 07:26 /dev/sda2
brw-rw---- 1 root disk 8, 16 Sep 21 07:26 /dev/sdb
[root@localhost ~]# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000cc3ff
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 20971519 9436160 8e Linux LVM
↓ 此處就是我們的新磁盤,且沒有被格式化
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
2.輸入相應盤符進入分區界面
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x5b3d4ae9.
Command (m for help):
3.開始分區,下面將逐個解釋其分區含義
[root@localhost ~]# fdisk /dev/sdb #指定要分區的盤符
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x5b3d4ae9.
Command (m for help): p #打印當前分區信息
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b3d4ae9
Device Boot Start End Blocks Id System
--------------------------------------------------------------------------------
[划分主分區]
Command (m for help): n #新建一個分區
Partition type:
p primary (0 primary, 0 extended, 4 free) #創建一個主分區
e extended #創建一個邏輯分區
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048): 2048 #默認從哪里開始划分
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +5G #指定划分5個GB
Partition 1 of type Linux and of size 5 GiB is set
Command (m for help): p #打印分區情況
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b3d4ae9
Device Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux #此處可看到一個主分區了
--------------------------------------------------------------------------------
[划分拓展分區]
Command (m for help): n #繼續創建分區
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e #這次選擇創建邏輯分區
Partition number (2-4, default 2): 2 #默認從2開始
First sector (10487808-20971519, default 10487808): 10487808 #默認開始無需動
Last sector, +sectors or +size{K,M,G} (10487808-20971519, default 20971519): #由於是拓展分區,所以這里不能指定大小
Using default value 20971519
Partition 2 of type Extended and of size 5 GiB is set
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b3d4ae9
Device Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
/dev/sdb2 10487808 20971519 5241856 5 Extended #這里可以看到已經有一個拓展結構了,接下來分區
--------------------------------------------------------------------------------
[在拓展分區的基礎上划分邏輯分區]
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5) #這里選擇l新建邏輯分區
Select (default p): l
Adding logical partition 5
First sector (10489856-20971519, default 10489856): 10489856 #默認開始位置
Last sector, +sectors or +size{K,M,G} (10489856-20971519, default 20971519): #划分全部空間
Using default value 20971519
Partition 5 of type Linux and of size 5 GiB is set
Command (m for help): w #保存分區表並退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]#
4.接下來使用fdisk -l 可以查看分區情況
[root@localhost ~]# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors #這是/dev/sda邏輯磁盤
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000cc3ff
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 20971519 9436160 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors #這是/dev/sdb邏輯磁盤
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b3d4ae9
Device Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux #這就是剛剛划分的主分區
/dev/sdb2 10487808 20971519 5241856 5 Extended #這是拓展結構
/dev/sdb5 10489856 20971519 5240832 83 Linux #這是邏輯分區
磁盤分區命令-Parted
parted命令是由GNU組織開發的一款功能強大的磁盤分區和分區大小調整工具,與fdisk不同它支持調整分區的大小,作為一種設計用於Linux的工具,它沒有構建成處理與fdisk關聯的多種分區類型,但是它可以處理最常見的分區格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交換分區.
既然有fdisk為啥還出個parted分區呢?
1.parted命令可以划分單個分區大於2T的GPT格式的分區,也可以划分普通的MBR分區,fdisk命令對於大於2T的分區無法划分.
2.大於2.2TB的存儲空間用fdisk不支持,需要采用parted來分區,所以用fdisk無法看到parted划分的GPT格式的分區.
◆parted常用參數◆
[root@localhost ~]# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE 創建新的磁盤卷標(分區表)
mkpart PART-TYPE [FS-TYPE] START END 創建一個分區
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] 打印當前分區信息
quit exit program
rescue START END rescue a lost partition near START and END
resizepart NUMBER END resize partition NUMBER
rm NUMBER 刪除一個分區
select DEVICE 選擇需要編輯的設備
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] 切換分區表狀態
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU Parted
(parted)
◆parted 分區實例◆
1.磁盤參數解釋
--------------------------------------------------------------------------------
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
↓ 磁盤參數
Model: VMware, VMware Virtual S (scsi)
↓ 磁盤大小
Disk /dev/sdb: 10.7GB
↓ 扇區大小
Sector size (logical/physical): 512B/512B
Partition Table: msdos ← 分區表格式
Disk Flags:
1 2 3 4 5 6 7
Number Start End Size Type File system Flags
(parted)
1.Number:分區號
2.Start:分區起始位置,這里不再像fdisk用柱面表示,而是使用byte更加直觀
3.End:分區結束位置
4.Size:分區大小
5.Type:分區類型
6.FileSystem:文件系統類型,parted不支持格式化成ext4,但能識別
7.標志(flags):分區標記
--------------------------------------------------------------------------------
2.將分區表格式修改成GPT
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
(parted) mklabel msdos #原格式是mbr
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) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt #新格式是gpe
Disk Flags:
Number Start End Size File system Name Flags
(parted)
3.創建一個分區
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
(parted) mkpart #創建分區
Partition name? []? disk1 #分區名
File system type? [ext2]? ext2 #分區格式,parted只能創建ext2,這里我們出去格式化吧
Start? 1MB #磁盤開始位置
End? 2000MB #磁盤結束為止
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2000MB 1999MB ext2 disk1 #此處已創建完成
(parted) q
磁盤分區命令-Swap
swap命令用於創建交換空間(包括交換文件和交換分區)
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 218M 112M 22M 5.1M 82M 69M
Swap: 1.0G 520K 1.0G
[root@localhost ~]# dd if=/dev/zero of=/tmp/swap bs=1024 count=100000
100000+0 records in
100000+0 records out
102400000 bytes (102 MB) copied, 2.6988 s, 37.9 MB/s
[root@localhost ~]# mkswap /tmp/swap
Setting up swapspace version 1, size = 99996 KiB
no label, UUID=7d7f22ed-466e-4205-8efe-1b6184dc5e1b
[root@localhost ~]# swapon /tmp/swap
swapon: /tmp/swap: insecure permissions 0644, 0600 suggested.
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 218M 109M 3.2M 2.8M 105M 75M
Swap: 1.1G 2.8M 1.1G
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Sep 18 09:05:06 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=13d5ccc2-52db-4aec-963a-f88e8edcf01c /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
UUID=7d7f22ed-466e-4205-8efe-1b6184dc5e1b swap swap defaults 0 0
[root@localhost ~]# swapoff /tmp/swap
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 218M 109M 5.5M 2.8M 103M 75M
Swap: 1.0G 2.7M 1.0G
磁盤的掛載與自動掛載
◆格式化與掛載◆
1.首先格式化一個磁盤.
[root@localhost ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Sep 21 07:26 /dev/sda
brw-rw---- 1 root disk 8, 1 Sep 21 07:26 /dev/sda1
brw-rw---- 1 root disk 8, 2 Sep 21 07:26 /dev/sda2
brw-rw---- 1 root disk 8, 16 Sep 21 07:50 /dev/sdb
brw-rw---- 1 root disk 8, 17 Sep 21 07:50 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Sep 21 07:50 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Sep 21 07:50 /dev/sdb5
[root@localhost ~]#
[root@localhost ~]# mkfs -t ext4 /dev/sdb1 #格式化一個磁盤
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
2.接着掛載這個磁盤
[root@localhost ~]# mkdir /sdb1 #創建掛載點
[root@localhost ~]# mount -t ext4 /dev/sdb1 /sdb1/ #將磁盤掛載
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.3G 6.8G 16% /
devtmpfs 98M 0 98M 0% /dev
/dev/sda1 1014M 130M 885M 13% /boot
/dev/sdb1 4.8G 20M 4.6G 1% /sdb1 #這個就是我們的磁盤
◆分區的自動掛載◆
1.首先我們要查看指定磁盤的UUID號
[root@localhost ~]# ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Sep 21 07:26 13d5ccc2-52db-4aec-963a-f88e8edcf01c -> ../../sda1
lrwxrwxrwx 1 root root 9 Sep 21 07:26 2018-05-03-20-55-23-00 -> ../../sr0
lrwxrwxrwx 1 root root 10 Sep 21 07:56 3439c4dd-d074-4900-a507-126e41b55e26 -> ../../sdb1 #此處就是我們sdb1的UUID
lrwxrwxrwx 1 root root 10 Sep 21 07:26 4604dcf2-da39-455a-9719-e7c5833e566c -> ../../dm-0
lrwxrwxrwx 1 root root 10 Sep 21 07:26 f6a4b420-aa6a-4e66-bbb3-c8e8280a099f -> ../../dm-1
2.打開/etc/fstab寫入以下內容實現效果,這里千萬別寫錯
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Sep 18 09:05:06 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=13d5ccc2-52db-4aec-963a-f88e8edcf01c /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
UUID=3439c4dd-d074-4900-a507-126e41b55e26 /sdb1 ext4 defaults 0 0
--------------------------------------------------------------------------------
[說明]
1.設備文件名(UUID)
2.掛載點
3.文件系統類型
4.掛載特殊選項
5.是否備份: 0不備份 1每天備份 2不定期備份
6.是否檢查磁盤狀態: 0不檢查 1啟動時檢查 2啟動后檢查
3.最后使用mount -a 測試是否能掛載上
[root@localhost ~]# mount -a
[root@localhost ~]#
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 1.3G 6.8G 16% /
devtmpfs 98M 0 98M 0% /dev
tmpfs 110M 0 110M 0% /dev/shm
tmpfs 110M 5.5M 104M 5% /run
tmpfs 110M 0 110M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 22M 0 22M 0% /run/user/0
/dev/sdb1 4.8G 20M 4.6G 1% /sdb1 #能說明成功
參考文獻:Linux鳥哥私房菜,Linux運維之道