【linux相識相知】磁碟分區及文件系統管理詳解

来源:http://www.cnblogs.com/liubinsh/archive/2017/07/28/7250985.html
-Advertisement-
Play Games

磁碟,提供持久的數據存儲,它不像我們的記憶體,如果突然斷電了,在記憶體中的數據一般都會被丟掉了,記憶體中的數據在保存的時候,會被寫到硬碟裡面,磁碟也是一種I/O設備。 我們都知道磁碟分區完成之後,還要進行格式化,這個格式化操作就是指定文件系統,文件系統的本質就是對一個存儲設備上的元數據和數據就行組織,最終 ...


磁碟,提供持久的數據存儲,它不像我們的記憶體,如果突然斷電了,在記憶體中的數據一般都會被丟掉了,記憶體中的數據在保存的時候,會被寫到硬碟裡面,磁碟也是一種I/O設備。

我們都知道磁碟分區完成之後,還要進行格式化,這個格式化操作就是指定文件系統,文件系統的本質就是對一個存儲設備上的元數據和數據就行組織,最終把數據有組織的放在可以長期存儲的設備中。

本次博客主要是介紹可linux中的磁碟分區和文件系統管理。

 

磁碟的介面類型:

IDE:一種較老的介面技術,價格低廉,相容性強,傳輸速度可達133MB/s;

SCSI:主要應用於中、高端伺服器中,支持熱拔插,價格較高,其中UltraSCSI可達320MB/S,UltraSCSI640可達640MB/S;

SCSI介面

SATA:主要用於PC上,串口硬碟,可達6gbps;

SAS:是一種串列鏈接的SCSI介面技術,向下相容SATA,速度快;

USB:一種便攜的存儲設備,USB3.0理論最大傳輸速度可達500MB/s,現在最新的USB3.1Gen 2最高可達10Gbps。

 

並口和串口的區別:

並口:同一線纜可以接多塊設備,IDE和SCSI為並口硬碟;

串口:同一線纜只可以接一個設備,SATA、SAS和USB為串口,抗干擾能力強。

我們都知道作為linux的哲學思想之一,一切皆文件,在linux中使用設備文件來標識不同的硬碟,也就是設備的訪問介面,在Linux中I/O設備分為2倍,字元設備和塊設備,基於不同的功能進行分類的:

(1)字元設備:線性訪問的,數據的交換單位是“字元”,提供的連續的數據流,不支持隨機存取,舉例來說,鍵盤、數據機都是典型的字元設備;

(2)塊設備:可以提供隨機訪問,數據交換的單位是“塊”,硬碟、CD-ROM驅動器都是典型的塊設備,應用可以定址磁碟上的任何位置,並讀取數據。

 

在Linux系統中,c代表字元設備,b為塊設備(紅色部分標識)。

後面黃色標註的兩行為設備號:

主設備號:左列,區分設備類型,用於標明設備所需要的驅動程式;

次設備號:右列,區分同種類型下的不同的設備。

 

 mknod命令

 mknod可以創建設備文件,格式如下:

mknod  [OPTION]...  NAME  TYPE  [MAJOR  MINOR]
選項:
-m MODE:創建後的設備文件的訪問許可權
mknod /dev/ttyUSB32 c 188 32

 linux的設備文件都是放在/dev目錄下的,應用程式可以通過這些設備文件完成都設備的讀寫等操作。之前寫過設備都有主次設備號,linux有約定俗成的編號,如硬碟的主設備號在centos6和7中為8:

 根據介面類型的不同,設備的文件名命令也有一些規定,在centos如下:

 

在引用設備的時候可以通過以下三種方式:

1.設備文件名,也就是/dev目錄下的文件名;

2.系統捲標(volume label);

3.UUID,唯一表示碼,能夠唯一的表示一個設備。

 

MBR和GPT

一塊磁碟是可以被分割成多個分區,從Windows的角度來看,就是C,D,E分區。磁碟分區的方式有MBR和GPT。

 

 MBR(Master Boot Record)

總共大小為512位元組,存在於磁碟的第0個扇區。

446bytes:引導啟動操作系統的程式;

64bytes:分區表,每16bytes標識一個分區,一共能夠有4個主分區,但是如果想劃分更多的區,可以指定擴展分區,比如分為3個主分區,一個擴展分區,而擴展分區可以劃分為若幹個邏輯分區。

 

 綜上所述,如果使用MBR分區,就必須至少有一個擴展分區,然後將擴展分區分成邏輯分區,邏輯分區的序號從5開始。

 

 GPT(GUID Partition Table):

MBR是另一種分區方式:

1):GPT分區表中最多可以支持128個主分區

2):突破了MBR單個分區只能是2.2T的限制,最大支持1EB容量

在GPT中主分區、擴展分區和模糊分區的概念就淡化了很多。

 

 

分區工具

 fidisk

 1.查看磁碟分區

fdisk -l device...:查看指定磁碟設備的分區情況

 

 2.管理分區

 fdisk為MBR方式的分區工具,提供了互動式的介面來管理分區所有的操作,都是在記憶體中完成的,當使用w保存的時候,才真正去創建或修改分區。

fdisk device

 我們來試試,可以看到使用fdisk加設備名,就進入到了一個互動式的界面,輸入m即可獲得幫助:

[root@localhost ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁碟標識符 0x3918c6ef 創建新的 DOS 磁碟標簽。
命令(輸入 m 獲取幫助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition                <=======刪除已有分區
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types        <======列出已知的分區類型
   m   print this menu                   <=======查看幫助信息
   n   add a new partition               <=======創建新的分區
   o   create a new empty DOS partition table
   p   print the partition table         <======顯示現有分區信息
   q   quit without saving changes       <======不保存退出
   s   create a new empty Sun disklabel
   t   change a partition's system id    <========修改分區類型
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit      <========保存並退出
   x   extra functionality (experts only)

 舉個例子:現在新加了一塊120G的磁碟,分為3個主分區,每個區20G,餘下的空間都給擴展分區並添加一個20G的邏輯分區。

[root@localhost ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁碟標識符 0x3918c6ef 創建新的 DOS 磁碟標簽。
命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分區號 (1-4,預設 1):1
起始 扇區 (2048-251658239,預設為 2048):
將使用預設值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-251658239,預設為 251658239):+20G
分區 1 已設置為 Linux 類型,大小設為 20 GiB
命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分區號 (2-4,預設 2):2
起始 扇區 (41945088-251658239,預設為 41945088):
將使用預設值 41945088
Last 扇區, +扇區 or +size{K,M,G} (41945088-251658239,預設為 251658239):+20G
分區 2 已設置為 Linux 類型,大小設為 20 GiB
命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
分區號 (3,4,預設 3):
起始 扇區 (83888128-251658239,預設為 83888128):
將使用預設值 83888128
Last 扇區, +扇區 or +size{K,M,G} (83888128-251658239,預設為 251658239):+20G
分區 3 已設置為 Linux 類型,大小設為 20 GiB
命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e
已選擇分區 4
起始 扇區 (125831168-251658239,預設為 125831168):
將使用預設值 125831168
Last 扇區, +扇區 or +size{K,M,G} (125831168-251658239,預設為 251658239):
將使用預設值 251658239
分區 4 已設置為 Extended 類型,大小設為 60 GiB
命令(輸入 m 獲取幫助):n
All primary partitions are in use
添加邏輯分區 5
起始 扇區 (125833216-251658239,預設為 125833216):
將使用預設值 125833216
Last 扇區, +扇區 or +size{K,M,G} (125833216-251658239,預設為 251658239):+20G
分區 5 已設置為 Linux 類型,大小設為 20 GiB

 查看分區情況:

[root@localhost ~]# fdisk -l /dev/sdb 
磁碟 /dev/sdb:128.8 GB, 128849018880 位元組,251658240 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標簽類型:dos
磁碟標識符:0x3918c6ef
   設備 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41945087    20971520   83  Linux
/dev/sdb2        41945088    83888127    20971520   83  Linux
/dev/sdb3        83888128   125831167    20971520   83  Linux
/dev/sdb4       125831168   251658239    62913536    5  Extended
/dev/sdb5       125833216   167776255    20971520   83  Linux

 

 parted

 這個工具既可以做MBR的分區,又可以做GPT的分區,主要時候用來做GPT的。

 1.查看分區情況:

parted -l device   (親測:竟然也可以使用fdisk -l指定設備查看)

 2.管理分區

 parted也提供了互動式的介面來管理分區,輸入help查看幫助,我們來看一下:

[root@localhost ~]# parted
GNU Parted 3.1
使用 /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               create a new disklabel (partition table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found
        partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  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]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted)                                  
(看起來比fdisk麻煩多了) 我們來舉個例子來說明parted的使用方法: 1)首先選擇要分區的設備,使用select Device
(parted) select /dev/sdc
使用 /dev/sdc

 2)選擇分區格式為GPT

 mklabel gpt

 下麵是命令的使用幫助

(parted) help mklabel 
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
    “標簽類型”是以下任意一項:aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop

 3)使用mkpart分區時,不需要指定分區的數字標識(在MBR中可能要指定1-4或更多),可以直接給它加上名稱,這說明在GPT分區的情況下,主分區擴展分區已經變得不那麼重要了,分區的起始點最好從1開始

(parted) mkpart 
分區名稱?  []? my_data1                                                  
文件系統類型?  [ext2]?     #文件系統先不用管,後面會講到                                               
起始點? 1        #                                                        
結束點? 2048     #預設為M

 4)這樣一個分區就創建好了,可以使用print查看

(parted) print                                                            
Model: ATA VMware Virtual I (scsi)
Disk /dev/sdc: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name      標誌
 1      1049kB  2048MB  2047MB               my_data1

 5)讓我們再來新建一個分區,新建分區的起始點就是上一個分區的結束點

(parted) mkpart                                                           
分區名稱?  []? my_data2
文件系統類型?  [ext2]?                                                   
起始點? 2048
結束點? 4096                                                             
(parted)                                                                  
(parted) print                                                            
Model: ATA VMware Virtual I (scsi)
Disk /dev/sdc: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name      標誌
 1      1049kB  2048MB  2047MB               my_data1
 2      2048MB  4096MB  2048MB               my_data2

 6)作為linux的哲學思想之一,避免與用戶交互,我們也可以使用以下方式來創建新的分區

(parted) mkpart my_data3 4096 6144                                        
(parted)                                                                  
(parted) print                                                            
Model: ATA VMware Virtual I (scsi)
Disk /dev/sdc: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name      標誌
 1      1049kB  2048MB  2047MB               my_data1
 2      2048MB  4096MB  2048MB               my_data2
 3      4096MB  6144MB  2048MB               my_data3

 7)parted使用quit退出即生效

(parted) quit                                                             
信息: You may need to update /etc/fstab.
[root@localhost ~]#       
以上就是2種比較常用的分區工具了 特別要註意的是,在已經分區並且已經掛載在根文件系統的目錄上的設備,再在這個設備上創建新的分區(比如在擴展分區上創建邏輯分區),內核可能在創建完成後無法直接識別。 可以查看/proc/partitions,確認內核是否已經識別:
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name
   8       16  125829120 sdb
   8       17   20971520 sdb1
   8       18   20971520 sdb2
   8       19   20971520 sdb3
   8       20          1 sdb4
   8       21   20971520 sdb5
   8       32   52428800 sdc
   8       33    1998848 sdc1
   8       34    1999872 sdc2
   8       35    1999872 sdc3
   8        0   20971520 sda
   8        1     512000 sda1
   8        2   20458496 sda2
  11        0    4277248 sr0
 253        0   16261120 dm-0
 253        1    2097152 dm-1
 253        2    2097152 dm-2

 如果沒有識別可以使用以下兩種方式通知內核強制重讀磁碟分區表:

partx -a device
kpartx -af device

 如果命令一次不能成功,請多試幾次。

 

文件系統的特性

磁碟分區完成之後,還要進行格式化,這個格式化操作就是指定文件系統,文件系統的本質就是對一個存儲設備上的元數據和數據就行組織,最終把數據有組織的放在可以長期存儲的設備中。

傳統的說法是一個分區只能格式化成一種文件系統,但是由於新技術的產生,LVM或者RAID,一個分區可以被格式化成多個文件系統,也可以將多個分區格式格式化成一個文件系統。

數據一般分為實際的數據(實際的數據,一首mp3)和元數據(文件的屬性和許可權等),它們在文件系統中存放的位置是不同的。實際的數據是存儲在data block中,元數據則是存儲在innode中,除此之外還有一個superblock。

superblock:記錄了文件系統的整體信息,包括innode/block的總量、使用量和剩餘量和文件系統的格式等

inode:記錄文件的屬性,一個文件占一個inode,同時也記錄了文件所在的block號

block:實際記錄文件的內容,若文件大小大於block,則占用多個block塊

 

 下麵就來講一下inode和block之間的關係:

 1.索引式文件系統

 若一個文件的inode號是4,此中存放了其block的位置:2,7,13,15,那麼操作系統讀取數據的時候,就可以根據inode中block的位置一次性將數據讀取出來。

 

2.鏈式文件系統

 和索引式文件系統不同的是蓮式讀取文件方式,常見於U盤的FAT格式,這種文件系統沒有inode的存在,每個block的號碼都記錄在前一個block中。

 

 3.磁碟重組

 磁碟重組的目的就是將寫在磁碟中離散的block重新組織一下,將同一個文件的block塊集合在一起,以便於數據的讀取。導致數據離散的原因,一般是由於文件系統使用的時間過長,非常多次的數據的操作,比如刪除、增加和修改的次數很多。

 

 文件系統的類別

Linux的文件系統: ext2(無日誌功能), ext3, ext4, xfs, reiserfs, btrfs
光碟:iso9660
網路文件系統:nfs, cifs
集群文件系統:gfs2, ocfs2
內核級分散式文件系統:ceph
windows的文件系統:vfat, ntfs
偽文件系統:proc, sysfs, tmpfs, hugepagefs
Unix的文件系統:UFS, FFS, JFS
交換文件系統:swap
用戶空間的分散式文件系統:mogilefs, moosefs, glusterfs

 

 linux下的EXT2文件系統

EXT2是一種比較舊的文件系統了,從Centos7開始文件系統已經開始使用了XFS,但是這種使用inode為基礎的文件系統還是要瞭解的,畢竟後面也出現了它的升級版本,EXT3和EXT4。

前面說過inode記錄是文件的許可權和屬性,inode和block在文件系統創建好之後就已經分好了的,但是我們想一想,如果一個硬碟有500G甚至更大,inode和block都放在一起就會顯得不是很合理,數量過大,不容易去管理。所有在EXT2文件系統中在格式化的時候將文件系統分為多個區塊,稱為block group,每個block group都有自己的block/inode/superblock。

下麵我們就來看看一個block group的大致樣子:

 

在文件系統的最前面有一個Boot Sector,可以安裝開機管理程式,這樣我們就能將不同的開機管理程式安裝在個別的文件系統之前,而不用覆蓋整個磁碟的MBR,這樣就能做出多重開機的環境。

 

 block group的內容:

date block:用來放置文件內容的地方,大小一般為1k、2k、4k,block的大小在格式化之後就不能再改變了,每個block就能存放一個文件的數據。

inode table:記錄了文件的許可權,文件的大小,時間戳,flag或者該文件的真正指向

superblock:block和inode的數量信息,文件系統的時間戳,一個有效比特,該值為0代表已經被掛載,該值為1則沒有被掛載

Filesystem Description:文件系統描述說明,描述了每個block group的開始和結束的block號碼,已經說明瞭superblock\bitmap\inodemap\data block分別在哪個一個block號碼之間。

block bitmap:block點陣圖,記錄block的使用情況,標明瞭哪些block是空的,我們在刪除的文件的時候,會發現很快,刪除文件操作其實就是改變了該文件占用的bitmap的位置為空,block的文件暫時沒有刪除,這就是我們的數據可以被找回的原因

inode bitmap:inode點陣圖,與block bitmap的功能類似,記錄的是使用與未使用的inode號碼。

 

目錄的Inode

文件系統會給目錄分配至少一個block,inode記錄了許可權和屬性以及分配到的block號,而block則記錄了這個目錄下的文件名與該文件名所占用的inode號碼。

下麵描述讀取一個目錄下文件的流程:

舉例:root讀取/tmp/test.txt文件的過程:

1./的inode:通過掛載點信息找到inode號碼為128的根目錄的inode,取得許可權和block號

2./的block:根據block的號碼,查看block的內容,找到目錄tmp/的文件名和其inode號

3.tmp/的inode:根據inode,獲取許可權信息和block號

4.tmp/的block:查看對應的block的內容,找到test.txt的inode號

5.test.txt的inode號:根據inode,獲取許可權信息和對應的block號

6.test.txt的block:獲取文件的實際內容

 

日誌式文件系統功能

數據存放區域:inode table,data block

metadata:中介數據,變化次數頻繁,superblock,block bitmap和inode bitmap

新增一個文件的過程:

1.根據目錄文件的inode確定用戶是否有許可權

2.根據inode點陣圖找到沒有使用的inode號,在inode table寫入許可權等信息

3.根據block點陣圖找到沒有使用的block號,在block中寫入實際數據,更新到inode中去

4.更新inode點陣圖和block點陣圖,並更新到superblock中

一般一個完整的新建文件的過程就如上

但是但是出現特殊情況,比如斷電,可能會出現數據僅僅寫到了inode table和block中卻沒有更新inode點陣圖和block點陣圖,也沒有更新superblock,那就導致中介數據和真正存儲數據的內容不一致。

在EXT2中,要使用e2fsck這個工具,要遍歷整個文件系統,!!不敢想象啊!

所以就出現了日誌式文件系統:

在文件系統中又單獨劃分一個區塊,記錄了寫入或修改文件時的信息

1.當要寫入一個文件的時候,就在日誌區塊記錄一下某個文件要寫入了

2.寫入文件的數據,更新metadata數據

3.完成數據和metadate的更新,在日誌記錄區塊當中完成對該文件的記錄

這樣,當發生意外的時候,我們可以直接檢查日誌記錄區塊,查看哪些文件有問題,然後做出校驗即可

EXT2不支持日誌式文件系統,EXT3和EXT4都支持日誌式文件系統,並向下相容EXT2

 

VFS

VFS(Virtual Filesystem Switch),linux系統通過VFS的核心功能去讀取文件系統。

比如/是使用的是/dev/sda1,其文件系統是ext2格式的,而/home使用的/dev/sda2,其格式為xfs,如果我們現在要讀取/home/Frank,直接cat就行了,我們有指定要用什麼文件系統的模塊去讀取嗎?沒有,這個就是VFS的功能,VFS可以管理所有的filesystem,示意圖如下:

 

 

硬鏈接和符號鏈接

 硬鏈接和符號鏈接都是都是鏈接文件,用"l"表示

 

(紅色為符號鏈接標識l,黃色為引用計數)

 

 硬鏈接 指向同一個inode的多個文件路徑 特性:目錄不支持硬鏈接,硬鏈接不支持跨文件系統,創建硬鏈接會增加inode引用計數 創建硬鏈接:
ln   源文件  鏈接文件

 我們來看一下如下:

[root@localhost ~]# ls -l /etc/ | grep "fstab" 
-rw-r--r--.  1 root root      541 7月  16 04:37 fstab為其創建一個鏈接

 為其創建一個鏈接

[root@localhost ~]# ln /etc/fstab /tmp/fstab.link

 引用計數變為了2

[root@localhost ~]# ls -l /etc/ | grep "fstab" 
-rw-r--r--.  2 root root      541 7月  16 04:37 fstab

 再去看一下/tmp下的鏈接文件

[root@localhost ~]# ls -l /tmp/ | grep "link"
-rw-r--r--. 2 root  root    541 7月  16 04:37 fstab.link

 cat一下內容,因為指向的是inode,所有即使你刪除了源文件,通過符號鏈接還是讀取文件內容:

[root@localhost ~]# cat /tmp/fstab.link 
#
# /etc/fstab
# Created by anaconda on Sun Jul 16 04:37:14 2017
#
# 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/cl-root     /                       xfs     defaults        0 0
UUID=ee087898-527c-41b0-85f6-3880e6bf0b73 /boot                   xfs     defaults        0 0
/dev/mapper/cl-var      /var                    xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0

 

符號鏈接

指向一個文件路徑的另一個文件路徑

特性:符號鏈接與文件兩個各自是獨立的文件,各有自己的inode,對文件創建符號鏈接不會增加引用計數

          支持對目錄創建符號鏈接,可以跨文件系統,刪除原文件,符號鏈接指定的路徑就不存在了,此時變成了無效鏈接:

ln  -s 源文件 鏈接文件
舉例:在當前目錄下創建文件,並添加內容:
[root@localhost ~]# touch frank.txt
[root@localhost ~]# echo "hello" > ./frank.txt 
[root@localhost ~]# cat frank.txt 
hello

 創建符號鏈接:

[root@localhost ~]# ln -s frank.txt  frank.link

 查看符號鏈接:

 

 刪除原文件後,符號填充色變黑,原文件名閃爍:

 

 寫了這麼些文件系統的基礎知識,應該可以大致理解文件系統是什麼個東西了,下麵我們就開始介紹如何管理和使用文件系統。

 

文件系統的管理

文件系統的創建: mkfs 格式1:
mkfs.文件系統格式   device
文件系統格式:
mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs     
mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat 

 舉例:將/dev/sdb1格式化為ext4格式

[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系統標簽=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一個數據塊=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: 完成                            
正在寫入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

 也可以使用:

mkfs -t 文件系統格式  device

 舉例:將/dev/sdb1格式化為ext3格式

[root@localhost ~]# mkfs -t  ext3 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系統標簽=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=4294967296
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: 完成                            
正在寫入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   

 

ext系列系統專用管理工具

 mke2fs

創建一個ext2或ext3或ext4的文件系統,和mkfs命令類似

mke2fs [OPTIONS] device
常用選項:
-t {ext2|ext3|ext4}:指明要創建的文件系統類型
-b {1024|2048|4096}:指明文件系統的塊大小;
-L LABEL:指明系統捲標;
-j:創建有日誌功能的文件系統ext3;
-i #:bytes-per-inode,指明inode與位元組的比率;即每多少位元組創建一個Indode;
-N #:直接指明要給此文件系統創建的inode的數量;
-m #:指定預留的空間,百分比;

 也可以使用-O選項,指定特性,具體指定的各種feature可以使用命令"man 5 ext4"查看

mke2fs -O feature  device
舉例:
[root@localhost ~]# mke2fs -t ext4  -L my_data /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系統標簽=my_data
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一個數據塊=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: 完成                            
正在寫入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

 

e2label 系統捲標的查看與設定 查看:
[root@localhost ~]# e2label  /dev/sdb1
my_data

 設定:

[root@localhost ~]# e2label /dev/sdb2 mydata2
[root@localhost ~]# 
[root@localhost ~]# e2label /dev/sdb2 
mydata2

 


tune2fs 調整ext2/ext3/ext4的文件系統的某些屬性,塊大小寫創建之後是不可以改變的
tune2fs [OPTIONS]  DEVICE
-l:查看super block的信息
修改文件系統的屬性:
-j:修改文件系統
-L LABEL:修改捲標
-m #:調整預留空間百分比
-O [^]FEATURE:開啟或關閉某種特性
-o [^]mout_options:開啟或關閉某種預設掛載選項,比如 開啟acl -o acl  或者關閉  -o  ^acl

 

dumpe2fs 查看設備屬性
blkid device
blkid -L LABEL:根據LABEL定位設備
blkid -U UUID:根據唯一表示號定位設備

 舉例

[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="my_data" UUID="0557dfda-a2ab-4d75-93be-38f84c6663a1" TYPE="ext4" 

 

文件系統檢測工具

因進程意外終止或者系統崩潰的時候,可能會造成文件損壞,此時應該檢查並修複文件系統,建立離線修複。

  e2fsck 檢測ext2\ext3\ext4類型的linux文件系統
e2fsck  [OPTIONS] device
-y:對所有問題自動回答yes
-f:即使文件系統處於clean狀態,也要強制檢查,clean說明文件系統沒有問題,反之為dirty

 

fsck

檢查和修改一個linux的文件系統
-t fstype:指名文件系統
-a:無須交互而自動修複所有的錯誤
-r:互動式修複

 也可以使用以下格式:

[root@localhost ~]# fsck
fsck         fsck.cramfs  fsck.ext3    fsck.fat     fsck.msdos   fsck.xfs     
fsck.btrfs   fsck.ext2    fsck.ext4    fsck.minix   fsck.vfat    
[root@localhost ~]# fsck.ext2  /dev/sdb1

在centos7上,預設使用的文件系統是xfs,centos6預設不可以格式化分區為xfs文件系統,可以安裝其文件系統驅動,在centos6安裝:

[root@localhost ~]# yum  -y install xfsprogs

 

swap文件系統

linux上的交換分區必須使用獨立的文件系統,system-ID必須是82

舉例:現在要把分區sdb5轉換為支持swap文件系統

[root@localhost ~]# fdisk /dev/sdb 
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。
命令(輸入 m 獲取幫助):t
分區號 (1-5,預設 5):5
Hex 代碼(輸入 L 列出所有代碼):l
 024  NEC DOS         81  Minix / 舊 Linu bf  Solaris        
 1  FAT12           27  隱藏的 NTFS Win 82  Linux 交換 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隱藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 擴展      c7  Syrinx         
 5  擴展            41  PPC PReP Boot   86  NTFS 捲集       da  非文件系統數據 
 6  FAT16           42  SFS             87  NTFS 捲集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 純文本    de  Dell 工具      
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
 9  AIX 可啟動      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 訪問       
 a  OS/2 啟動管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 擴展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隱藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 診斷     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隱藏的 FAT16 <3 61  SpeedStor       ab  Darwin 啟動     f2  DOS 次要       
16  隱藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隱藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自動
1b  隱藏的 W95 FAT3 70  DiskSecure 多啟 bb  Boot Wizard 隱  fe  LANstep        
1c  隱藏的 W95 FAT3 75  PC/IX           be  Solaris 啟動    ff  BBT    
Hex 代碼(輸入 L 列出所有代碼):82
已將分區“Linux”的類型更改為“Linux swap / Solaris”
命令(輸入 m 獲取幫助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁碟。

 再來查看sdb的分區情況

[root@localhost ~]# fdisk -l /dev/sdb
磁碟 /dev/sdb:128.8 GB, 128849018880 位元

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

-Advertisement-
Play Games
更多相關文章
  • 安裝Nginx 1、首先添加nginx_signing.key(必須,否則出錯) 2、添加]Nginx](http://nginx.org/)官方提供的源 3、更新源並安裝Nginx 4、安裝Nginx完成後可查看版本號,輸入 1、添加PPA 2、安裝PHP5.6以及所需的一些擴展 3、配置PHP5 ...
  • 1、cube:生成多維數據集,包含各維度可能組合的交叉表格,使用with 關鍵字連接 with cube 根據需要使用union all 拼接 判斷 某一列的null值來自源數據還是 cube 使用GROUPING關鍵字 GROUPING([檔案號]) = 1 : null值來自cube(代表所有的 ...
  • 二、設置mysql遠程訪問 1. 編輯mysql配置文件,把其中bind-address = 127.0.0.1註釋了 2. 使用root進入mysql命令行,執行如下2個命令,示例中mysql的root賬號密碼:root 3. 重啟mysql 三、MySQL修改root密碼的多種方法 方法1: 用 ...
  • Hbase單機安裝部署 "http://blogxinxiucan.sh1.newtouch.com/2017/07/27/Hbase單機安裝部署/" 下載Hbase Hbase官網下載地址 解壓 配置 啟動hbase 查看Hbase 瀏覽器訪問:http://localhost:60010/ 操作 ...
  • #ifconfig 2.獲取新增網卡的真實mac #ip addr 3.複製eth0到eth1並修改配置文件 #cd /etc/sysconfig/network-scripts #cp ifcfg-eth0 ifcfg-eth1 #vim ifcfg-eth1 要修改的內容有: HWADD 通過i ...
  • 在編寫shell腳本時,除了聲明bash,頭部的一些其他註釋信息如腳本描述、作用等等是十分必要的。那麼能否編輯一個腳本在創建新腳本時自動生成頭部註釋信息呢。下麵就來編出自動生成註釋信息的腳本。 自動創建註釋信息是利用多行重定向,將事先定義好的聲明bash、以及其他註釋信息,重定向到新的腳本並且打開可 ...
  • [原創]編譯安裝lnmp環境 準備軟體:nginx1.10.3+php-5.5.12+mariadb10.0.8(資料庫在此使用的yum安裝) 如果需要編譯安裝的可以給我留言,我後續再發佈出來! 依賴包均已yum線上安裝 一、yum安裝mariadb資料庫 yum -y install mariad ...
  • 問題 使用apt-get install時,提示: E: 無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用)E: 無法鎖定管理目錄(/var/lib/dpkg/),是否有其他進程正占用它? 解決方案 方案一:列出進程,找到含有apt-get的進程,直接sudo ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...