linux下使用fdisk進行磁碟分割槽詳解
阿新 • • 發佈:2022-04-06
目錄
一.前言
當伺服器插入一塊硬碟,如果我們想要使用該硬碟,需要先使用磁碟分割槽管理工具進行磁碟分割槽,然後格式化分割槽,把分割槽掛載到目錄
上,才可以正式使用該硬碟儲存檔案。磁碟分割槽管理工具有很多,本文主要介紹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