目錄
一.前言
當服務器插入一塊硬盤,如果我們想要使用該硬盤,需要先使用磁盤分區管理工具進行磁盤分區,然后格式化分區,把分區掛載到目錄
上,才可以正式使用該硬盤存儲文件。磁盤分區管理工具有很多,本文主要介紹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