1. 程式人生 > 其它 >linux下使用fdisk進行磁碟分割槽詳解

linux下使用fdisk進行磁碟分割槽詳解

目錄

 

一.前言

​ 當伺服器插入一塊硬碟,如果我們想要使用該硬碟,需要先使用磁碟分割槽管理工具進行磁碟分割槽,然後格式化分割槽,把分割槽掛載到目錄

上,才可以正式使用該硬碟儲存檔案。磁碟分割槽管理工具有很多,本文主要介紹fdisk,gdisk,parted,並進行比較。

二.關於磁碟分割槽的結構

1.磁碟的分割槽結構有兩種,一種是MBR分割槽,一種是GPT分割槽,下面對兩種結構的特點進行一一說明。

2.MBR(Master Boot Record)

  • ​ 是傳統的分割槽機制,應用於絕大多數使用BIOS引導的PC裝置(蘋果使用EFI的方式),很多Server伺服器即支援BIOS也支援EFI的引導方式;
  • ​ MBR支援32bit和64bit系統;
  • ​ MBR分割槽分為主分割槽(一塊硬碟最多隻能建立4個主分割槽)、擴充套件分割槽(一個擴充套件分割槽會佔用一個主分割槽的位置)、邏輯分割槽(邏輯分割槽是基於擴充套件分割槽創建出來的,先有擴充套件分割槽,然後在擴充套件分割槽的基礎上再建立邏輯分割槽;也就是說我們要使用邏輯分割槽,必須先要建立擴充套件分割槽,擴充套件分割槽的空間是不能被直接使用的,我們必須在擴充套件分割槽的基礎上去建立邏輯分割槽,才能夠被使用)。在Linux上使用擴充套件分割槽和邏輯分割槽最多可以建立15個分割槽;
  • ​ MBR只支援不超過2TB的硬碟。

3.GPT(GUID Partition Table)

  • ​ 是一個較新的分割槽機制,解決了MBR的很多缺點;
  • ​ 支援超過2TB的磁碟;
  • ​ 向後相容MBR;
  • ​ 使用GPT分割槽的前提是底層硬體必須支援UEFI(Intel提出的取代BIOS的新一代的引導系統)才能使用,也就是底層硬體必須使用UEFI;
  • ​ GPT分割槽只支援64位作業系統;
  • ​ GPT分割槽列表支援最大128PB(1PB=1024TB),可以定義128個分割槽,沒有主分割槽,擴充套件分割槽和邏輯分割槽的概念,所有分割槽都能格式化。

4.判斷分割槽是GPT還是MBR的方法如下:

[root@node5 ~]# fdisk -l
Disk /dev/sda: 37.6 GB, 37580963840 bytes, 73400320 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: 0x000b606a

#Disk label type: dos這行資訊說明該分割槽是MBR分割槽
#如果顯示Disk label type: gpt則說明該分割槽是GPT分割槽

#如下命令也可以檢視
[root@node5 ~]# gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present
  
#還可以使用如下方法
[root@node5 ~]# parted -l 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 37.6GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1075MB  1074MB  primary  xfs          boot
 2      1075MB  21.5GB  20.4GB  primary               lvm
 
#顯示Partition Table: msdos,則是MBR分割槽
#顯示Partition Table: gpt,則是GPT分割槽

三.fdisk命令詳解

進入fdisk命令視窗之後,輸入m,可以檢視所有的fdisk功能。

[root@node5 ~]# 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.


Command (m for help): m
Command action
   a   toggle a bootable flag                                   # 切換可啟動標誌
   b   edit bsd disklabel                           # 編輯磁碟標記
   c   toggle the dos compatibility flag               # 切換dos相容標誌
   d   delete a partition                        # 刪除一個分割槽
   g   create a new empty GPT partition table                  # 建立一個空的GPT分割槽表
   G   create an IRIX (SGI) partition table                    # 建立一個IRIX分割槽表
   l   list known partition types                   # 列出已知的分割槽型別
   m   print this menu                          # 列印選單                   
   n   add a new partition                                       # 新增一個分割槽
   o   create a new empty DOS partition table                    # 建立一個空的DOS分割槽表
   p   print the partition table                                 # 列印分割槽表
   q   quit without saving changes                               # 退出不儲存
   s   create a new empty Sun disklabel                          # 建立一個空的sun磁碟標籤
   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)                        # 高階功能
   

四.使用fdisk進行磁碟分割槽

4.1 磁碟分割槽規劃

本次磁碟分割槽的規劃如下:建立一個主分割槽,一個擴充套件分割槽,其中擴充套件分割槽包含兩個邏輯分割槽。

4.2 fdisk進行磁碟分割槽

使用fdisk對/dev/sdb硬碟進行分割槽。

#使用lsblk檢視可以知道,sdb這塊磁碟大小為1G
[root@node5 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   35G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    1G  0 disk 
└─sdb1            8:17   0  200M  0 part 

#對/dev/sdb這塊磁碟進行分割槽
[root@node5 ~]# 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.


Command (m for help): m            #檢視幫助
Command action
   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)

Command (m for help): p              #列印分割槽表

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x56e11754

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      411647      204800   83  Linux

#看到已經存在一個分割槽/dev/sdb1,我們先把/dev/sdb1給刪除
Command (m for help): d         #刪除分割槽
Selected partition 1
Partition 1 is deleted

Command (m for help): p        #列印分割槽表,再次檢視分割槽表,發現/dev/sdb1已經被刪除

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x56e11754

   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):                         #主分割槽號,會生成/dev/sdb1
First sector (2048-2097151, default 2048):                  #開始扇區,回車預設從2048開始
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +50M     #分配主分割槽大小,在此為50M
Partition 1 of type Linux and of size 50 MiB is set

Command (m for help): p              #列印分割槽表,可以看到已經建立了主分割槽/dev/sdb1

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x56e11754

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      104447       51200   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):          #擴充套件分割槽編號,在此我們直接回車,預設為/dev/sdb2
First sector (104448-2097151, default 104448):               #預設回車,從當前扇區開始
Using default value 104448
Last sector, +sectors or +size{K,M,G} (104448-2097151, default 2097151): +500M    #分配擴充套件分割槽大小,在此為500M
Partition 2 of type Extended and of size 500 MiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l                         #新建邏輯分割槽
Adding logical partition 5                    #預設邏輯分割槽編號為5
First sector (106496-1128447, default 106496):                 #邏輯分割槽起始位置
Using default value 106496
Last sector, +sectors or +size{K,M,G} (106496-1128447, default 1128447): +200M     #分配邏輯分割槽大小,在此為200M
Partition 5 of type Linux and of size 200 MiB is set

Command (m for help): n     
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l                   #新建第二個邏輯分割槽
Adding logical partition 6
First sector (518144-1128447, default 518144): 
Using default value 518144
Last sector, +sectors or +size{K,M,G} (518144-1128447, default 1128447):             #直接回車,預設分配剩餘空間
Using default value 1128447
Partition 6 of type Linux and of size 298 MiB is set

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x56e11754

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      104447       51200   83  Linux
/dev/sdb2          104448     1128447      512000    5  Extended
/dev/sdb5          106496      516095      204800   83  Linux
/dev/sdb6          518144     1128447      305152   83  Linux

#通過如上輸出可知,/dev/sdb1為主分割槽,/dev/sdb2為擴充套件分割槽,擴充套件分割槽又包含兩個邏輯分割槽/dev/sdb5和/dev/sdb6

Command (m for help): w            #儲存分割槽資訊並退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@node5 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   35G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    1G  0 disk 
├─sdb1            8:17   0   50M  0 part 
├─sdb2            8:18   0    1K  0 part 
├─sdb5            8:21   0  200M  0 part 
└─sdb6            8:22   0  298M  0 part 
sr0              11:0    1 1024M  0 rom  

[root@node5 ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb5  /dev/sdb6

4.3 格式化分割槽

把分割槽格式化成你想要的檔案系統。

#可以把分割槽格式化成各種檔案系統
[root@node5 ~]# mkfs
mkfs         mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.fat     mkfs.minix   mkfs.msdos   mkfs.vfat    mkfs.xfs     

#把/dev/sdb1格式化成xfs檔案系統
[root@node5 ~]# mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@node5 ~]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=2, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=12800, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

#把/dev/sdb5格式化成ext4檔案系統
[root@node5 ~]# mkfs.ext4 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done 

4.4 建立掛載點/掛載目錄

[root@node5 ~]# mkdir /sdb1
[root@node5 ~]# mkdir /sdb5

4.5 掛載分割槽

[root@node5 ~]# mount /dev/sdb1 /sdb1

[root@node5 ~]# mount /dev/sdb5 /sdb5

[root@node5 ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G   11G  6.1G  65% /
devtmpfs                devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs                   tmpfs     3.9G  8.0K  3.9G   1% /dev/shm
tmpfs                   tmpfs     3.9G  8.8M  3.9G   1% /run
tmpfs                   tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  125M  890M  13% /boot
tmpfs                   tmpfs     785M     0  785M   0% /run/user/0
/dev/sdb1               xfs        47M  2.7M   45M   6% /sdb1
/dev/sdb5               ext4      190M  1.6M  175M   1% /sdb5

4.6 設定開機自動掛載分割槽

磁碟分割槽使用mount手動掛載之後,還需要把掛載資訊寫入/etc/fstab檔案中,不然重啟之後,需要重新掛載。系統開機時會主動讀

取/etc/fstab這個檔案中的內容,根據檔案裡面的配置掛載磁碟。這樣我們只需要將磁碟的掛載資訊寫入這個檔案中我們就不需要每次開

機啟動之後手動進行掛載了。

[root@node5 ~]# echo "/dev/sdb1  /sdb1 xfs defaults 0 0 " >> /etc/fstab
[root@node5 ~]# echo "/dev/sdb5  /sdb5 ext4 defaults 0 0 " >> /etc/fstab

#註釋,/etc/fstab檔案詳解
#示例為: /dev/sda3              /home         ext4      defaults,noatime      0      2

/etc/fstab檔案主要包括6段,依次是:
<file system>  <dir>  <type>  <options>  <dump>  <pass>
<file system> 要掛載的分割槽或儲存裝置
<dir>  掛載的目錄位置
<type> 掛載分割槽的檔案系統型別,比如:ext3、ext4、xfs、swap
<options> 掛載使用的引數有哪些。舉例如下:
	auto - 在啟動時或鍵入了 mount -a 命令時自動掛載。
	noauto - 只在你的命令下被掛載。
	exec - 允許執行此分割槽的二進位制檔案。
	noexec - 不允許執行此檔案系統上的二進位制檔案。
	ro - 以只讀模式掛載檔案系統。
	rw - 以讀寫模式掛載檔案系統。
	user - 允許任意使用者掛載此檔案系統,若無顯示定義,隱含啟用 noexec, nosuid, nodev 引數。
	users - 允許所有 users 組中的使用者掛載檔案系統.
	nouser - 只能被 root 掛載。
	owner - 允許裝置所有者掛載.
	sync - I/O 同步進行。
	async - I/O 非同步進行。
	dev - 解析檔案系統上的塊特殊裝置。
	nodev - 不解析檔案系統上的塊特殊裝置。
	suid - 允許 suid 操作和設定 sgid 位。這一引數通常用於一些特殊任務,使一般使用者執行程式時臨時提升許可權。
	nosuid - 禁止 suid 操作和設定 sgid 位。
	noatime - 不更新檔案系統上 inode 訪問記錄,可以提升效能。
	nodiratime - 不更新檔案系統上的目錄 inode 訪問記錄,可以提升效能(參見 atime 引數)。
	relatime - 實時更新 inode access 記錄。只有在記錄中的訪問時間早於當前訪問才會被更新。(與 noatime 相似,但不會打斷如 	mutt 或其它程式探測檔案在上次訪問後是否被修改的程序。),可以提升效能。
	flush - vfat 的選項,更頻繁的重新整理資料,複製對話方塊或進度條在全部資料都寫入後才消失。
	defaults - 使用檔案系統的預設掛載引數,例如 ext4 的預設引數為:rw, suid, dev, exec, auto, nouser, async.

<dump>  dump 工具通過它決定何時作備份. dump 會檢查其內容,並用數字來決定是否對這個檔案系統進行備份。 允許的數字是 0 和 1 。0 表示忽略, 1 則進行備份。大部分的使用者是沒有安裝 dump 的 ,對他們而言 <dump> 應設為 0。

<pass> fsck 讀取 <pass> 的數值來決定需要檢查的檔案系統的檢查順序。允許的數字是0, 1, 和2。 根目錄應當獲得最高的優先權 1, 其它所有需要被檢查的裝置設定為 2. 0 表示裝置不會被 fsck 所檢查。

4.7 檢視磁碟分割槽效果

[root@node5 ~]# df -hT /sdb1
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sdb1      xfs    47M  2.7M   45M   6% /sdb1

[root@node5 ~]# df -hT /sdb5
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sdb5      ext4  190M  1.6M  175M   1% /sdb5