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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM