分區是將一個硬盤驅動器分成若干個邏輯驅動器,分區是把硬盤連續的區塊當做一個獨立的磁盤使用。分區表是一個硬盤分區的索引,分區的信息都會寫進分區表。
通常情況下,為磁盤分區通常使用fdisk,它是對基於MBR機制分區的管理磁盤命令,但是它僅僅支持2TB以下磁盤的分區,超出2TB部分無法識別。若過超過則可以使用parted進行分區,本文主要講解fdisk分區。
當前以虛擬機內的CentOS7為例:
fdisk磁盤分區
1、查看Linux系統上的文件系統(包含文件系統類型)的磁盤使用情況:
df -hT
詳情如下:
[root@localhost ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 994M 0 994M 0% /dev
tmpfs tmpfs 1000M 0 1000M 0% /dev/shm
tmpfs tmpfs 1000M 96M 905M 10% /run
tmpfs tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 6.7G 3.4G 3.3G 51% /
/dev/sda1 xfs 497M 118M 380M 24% /boot
tmpfs tmpfs 200M 0 200M 0% /run/user/0
2、fdisk命令詳情如下:
fdisk(選項)(參數)
選項:
-b<分區大小>:指定每個分區的大小;
-l:列出指定的外圍設備的分區表狀況;
-s<分區編號>:將指定的分區大小輸出到標准輸出上,單位為區塊;
-u:搭配"-l"參數列表,會用分區數目取代柱面數目,來表示每個分區的起始地址;
-v:顯示版本信息。
參數:
設備文件:指定要進行分區或者顯示分區的硬盤設備文件
菜單操作說明:
a 設置可引導標記
b 編輯bsd磁盤標簽
c 設置Dos操作系統兼容標記
d 刪除一個分區
l 顯示已知的文件系統類型,例:83為Linux分區,82為Linux swap分區
m 顯示菜單和幫助信息
n 新建分區
o 建立空白的DOS分區表
p 列出當前磁盤的分區表信息
q 不保存退出
s 新建空白SUN磁盤標簽
t 改變一個分區的系統ID
u 改變顯示記錄單位
v 進行分區檢查
w 保存退出
x 附加功能
x :擴展應用,高級功能
查看磁盤分區情況
查看命令:
fdisk -l
例如:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 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: 0x000c374c
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 16777215 7875584 8e Linux LVM
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0xda06dd45
Device Boot Start End Blocks Id System
Disk /dev/mapper/centos-root: 7159 MB, 7159676928 bytes, 13983744 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 /dev/mapper/centos-swap: 859 MB, 859832320 bytes, 1679360 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
磁盤分區
1、從上述查看結果可以看出/dev/sdb可進行分區:
fdisk /dev/sdb
其中”Device Boot Start End Blocks Id System”描述如下:
第一列:Device 顯示了磁盤分區對應的設備文件名。
第二列:Boot 顯示是否為引導分區,上圖中的 /dev/sda1 就是引導分區。
第三列:Start 表示磁盤分區的起始位置。
第四列:End 表示磁盤分區的結束位置。
第五列:Sectors 表示分區占用的扇區數目。
第六列:Size 顯示分區的大小。
第七列和第八列:顯示的內容相同,分別是數值ID及其文字描述。 Id列顯示了磁盤分區對應的ID,根據分區的不同,分區對應的ID號也不相同。
Linux下用83表示主分區和邏輯分區,82表示swap交換分區,5表示擴展分區,8e表示LVM分區,7表示NTFS分區
2、進入交互模式后按 “m” 可列出所有命令
[root@localhost ~]# 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)
3、輸入 “p” 列出磁盤目前的分區情況:
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0xda06dd45
Device Boot Start End Blocks Id System
可以看出尚未進行分區。
4、輸入 “n” 創建新的磁盤分區:
1)出現兩個菜單e表示擴展分區,p表示主分區
2)按”p”鍵(或直接回車,即默認)出現提示:”Partition number (1-4): “選擇主分區號
3)輸入”1”(或直接回車,即默認)表示第一個主分區
4)直接按回車表示”1”柱面開始分區
5)提示最后一個柱面或大小
分區的大小通過分區開始處的扇區和結束處的扇區設置的,或者輸入分區的大小,如+4G(即磁盤容量為4G);之后回車,即表示創建了第一個分區。
這里如果不設置結束處的扇區或輸入分區大小,而是直接回車會把整個磁盤划分為一個分區,也可以創建多個分區
6)輸入”p”可查看磁盤目前的分區情況,如果分區沒有問題,可以進行保存。
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): 1
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215
Partition 1 of type Linux and of size 8 GiB is set
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0xda06dd45
Device Boot Start End Blocks Id System
/dev/sdb1 2048 16777215 8387584 83 Linux
5、按 “t” 鍵可改變一個分區的系統ID
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0xda06dd45
Device Boot Start End Blocks Id System
/dev/sdb1 2048 16777215 8387584 83 Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / 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 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 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 hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Hex code (type L to list all codes): a6
Changed type of partition 'Linux' to 'OpenBSD'
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0xda06dd45
Device Boot Start End Blocks Id System
/dev/sdb1 2048 16777215 8387584 a6 OpenBSD
5、按 “d” 鍵刪除分區:
如果分區有誤,可以刪除重新分區。如下:
Command (m for help): d
Selected partition 1
Partition 1 is deleted
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 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: 0xda06dd45
Device Boot Start End Blocks Id System
6、按 “w” 鍵保存退出:
分區結束后一定要保存,否則之前的分區不會生效
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
各個參數的解析:
1. 輸入 m 顯示所有命令列示。
2. 輸入 p 顯示硬盤分割情形,打印分區表。
3. 輸入 a 設定硬盤啟動區。
4. 輸入 n 設定新的硬盤分割區。
4.1. 輸入 e 硬盤為[延伸]分割區(extend)。
4.2. 輸入 p 硬盤為[主要]分割區(primary)。
5. 輸入 t 改變硬盤分割區屬性。例:
82: linux swap
83:linux
86:NTFS window分區
6. 輸入 d 刪除硬盤分割區屬性。
7. 輸入 q 結束不存入硬盤分割區屬性。
8. 輸入 w 結束並寫入硬盤分割區屬性
磁盤格式化(創建文件系統)
查看文件系統的類型
1、mount
查看已經掛載的文件系統類型。
[root@localhost /]# mount | grep "^/dev"
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
2、lsblk
顯示塊設備,當使用 -f 選項時,會打印當前系統所有分區的文件系統類型。
[root@localhost /]# lsblk -f //lsblk -o UUID -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
|-sda1 xfs d918cc0b-aa5b-4147-bd41-469533c0618d /boot
`-sda2 LVM2_member F6FzL6-RBmy-3vgL-IbSC-caU3-rIUg-9hv2jg
|-centos-root xfs 96b564fd-7267-4cf3-a4c2-78da91f07e2d /
`-centos-swap swap 4677bc0d-f76e-4af0-b078-196f86856f19 [SWAP]
sdb
`-sdb1 ext4 32ce315d-b6a5-49a6-84c7-daaec7ac32cb
sr0
3、file -s
確定磁盤上是否存在文件系統。新磁盤為原始的塊儲存設備,必須先在這種設備上創建文件系統,然后才能夠裝載並使用它們,
file -s 命令獲取設備信息,例如其文件系統類型。如果輸出僅顯示 data(如以下示例輸出),則說明設備上沒有文件系統,您必須創建一個文件系統。
[root@localhost /]# sudo file -s /dev/sdb
/dev/sdb: data
[root@localhost /]# sudo file -s /dev/sda1
/dev/sda1: XFS filesystem data
查看當前系統支持的文件系統
1、cat /proc/filesystems
[root@localhost /]# cat /proc/filesystems
nodev sysfs
nodev rootfs
...
nodev mqueue
xfs
ext3
ext2
ext4
iso9660
vfat
hfs
hfsplus
2、cat /etc/filesystems
[root@localhost /]# cat /etc/filesystems
xfs
ext4
ext3
ext2
...
hfs
hfsplus
*
3、ls -l /lib/modules/uname -r
/kernel/fs (CentOS)
[root@localhost /]# ls -al /lib/modules/`uname -r`/kernel/fs
total 60
drwxr-xr-x 33 root root 4096 Feb 15 18:44 .
drwxr-xr-x 12 root root 118 Feb 15 18:44 ..
drwxr-xr-x 2 root root 21 Feb 15 18:44 btrfs
...
drwxr-xr-x 2 root root 22 Feb 15 18:44 exofs
drwxr-xr-x 2 root root 20 Feb 15 18:44 ext4
mke2fs命令
系統分區之后,並不能直接使用,需要格式化。mke2fs命令是專門用於管理ext系列文件系統的一個專門的工具。其還有像mkfs.ext2,mkfs.ext3,mkfs.ext4等衍生的命令
命令格式:
mke2fs [options] [device]
選項說明:
-t 指定文件系統類型(如ext2,ext3,ext4等),則會從/etc/mke2fs.conf文件中讀取默認配置;
-j:創建ext3文件系統,mkfs.ext3自帶了該選項,不加-j則為ext2;
-b block-size:設置硬盤的block大小。
-L 'LABEL':設置卷標;
-N:設置inode節點的數量;
-m:設置為文件系統預留的塊的百分比;
-c:在創建文件系統前進程硬盤自檢;
例如:
mke2fs /dev/sdb1 #創建文件系統格式為ext2
mke2fs -j /dev/sdb1 #創建文件系統格式為ext3
mke2fs -t ext4 /dev/sdb1 #創建文件系統格式為ext4
[root@localhost /]# mke2fs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096896 blocks
104844 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 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
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
e2fsck -p /dev/sdb1 #檢查ext2/ext3/ext4格式的文件系統:文件、扇區是否有錯誤,參數-p(等同 -a)是自動修復
格式化完成之后,便可以進行硬盤的掛載。
磁盤掛載
格式化硬盤后,需要為每個分區設置掛載點,有兩種方式:一種是臨時掛載,重啟失效;另一種開機自動掛載。
1、創建掛載點
mkdir /data
作為掛載點的目錄,理論上都應該是空目錄。如果掛載的目錄不為空,那么掛載了文件系統之后,原目錄下的內容會暫時消失(被隱藏,而不是被覆蓋),且不會將此前的目錄容量加上,取消掛載之后,原來內容即可恢復。
2、磁盤掛載
第一種方式:臨時掛載(手動掛載),重啟失效
命令mount可用來掛載文件系統:
mount 要掛載的設備源 掛載目的點
例如:
mount /dev/sdb1 /data
常用參數:
不帶參數的mount命令會顯示所有已掛載的文件系統
-t 指定文件系統的類型,如:-t ext4、-t vfat
-o 指定掛載選項:
ro: 以只讀方式掛載;
rw: 以讀寫方式掛載,默認掛載選項;
async: 異步IO,數據寫操作優先於內存完成,然后再根據某種策略同步至硬盤中,默認掛載選項;
sync: 同步IO;
auto/noauto: 設置設備是否支持mount的-a選項自動掛載,默認掛載為auto;
exec/noexec: 設置是否允許執行此設備上得二進制程序文件,默認掛載為exec;
suid/nosuid: 設置是否支持在此設備的文件上使用suid,默認掛載為suid;
user/nouser: 設置是否允許普通掛載此文件設備,默認掛載為nouser;
defaults: 使用預設的選項 rw, suid, dev, exec, auto, nouser, and async;
remount: 重新掛載文件系統
比如:
mount -t ext4 -o remount,ro /dev/sdb1 /data/ #重新掛載並只讀
第二種方式:開機自動掛載
blkid命令,可以查看硬盤設備的信息(或者采用上述的命令lsblk):
[root@localhost data]# blkid
/dev/sda1: UUID="d918cc0b-aa5b-4147-bd41-469533c0618d" TYPE="xfs"
/dev/sda2: UUID="F6FzL6-RBmy-3vgL-IbSC-caU3-rIUg-9hv2jg" TYPE="LVM2_member"
/dev/sdb1: UUID="330c5768-3bdb-4a25-9b91-626276a6d2ca" TYPE="ext4"
/dev/mapper/centos-root: UUID="96b564fd-7267-4cf3-a4c2-78da91f07e2d" TYPE="xfs"
/dev/mapper/centos-swap: UUID="4677bc0d-f76e-4af0-b078-196f86856f19" TYPE="swap"
1、編輯/etc/fstab,添加一行。
查看要掛載分區的UUID(Universally Unique Identifier),將UUID或者直接將對應的設備文件名寫入文件中,即:
echo 'UUID="F6FzL6-RBmy-3vgL-IbSC-caU3-rIUg-9hv2jg" /data ext4 defaults 0 0' >> /etc/fstab
或者
echo '/dev/sdb1 /data ext4 defaults 0 0' >> /etc/fstab
備注:開機自動掛載最好設置UUID,其次使用卷標,因為有時卷設備名會發生變化,導致開機啟動出現異常
每列描述如下:
file system<設備文件名稱> mount point<掛載目錄> type<文件系統類型> options<文件系統參數> dump<是否備份> pass<開機時自檢>
第一列:可以是設備名稱(比如 /dev/sda1)或標記 (LABEL=) 或 UUID (UUID=)
第二列:掛載點(也就是掛載目錄),對於交換空間,該值應該是”none”或”swap”
第三列:所要掛載設備的文件系統類型。支持許多種不同的文件系統:ext2, ext3, ext4, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap 及 auto。設置成auto類型,mount 命令會猜測使用的文件系統類型,對 CDROM 和 DVD 等移動設備是非常有用的。
第四列:掛載參數,即mount命令“-o”選項后可使用的參數,如defaults、rw等,通常使用defaults即可
第五列:備份,dump是一個用來作為備份的命令。0:不做備份 1:每天備份
第六列:文件系統的檢查順序。開機的過程中,系統默認會以fsck檢驗我們系統是否為完整;0:不檢驗,1:最先檢驗(一般根目錄即”/“會選擇, 設置后其他不能再使用1),2:1級別檢驗完成之后進行檢驗
2、/etc/fstab寫入完成后,重啟或者執行”mount -a”自動掛載。
3、最后”df -hT”查看掛載是否成功。
取消掛載
命令umount用來卸載已掛載的文件系統,命令:
umount 文件系統或者掛載點
例如:
[root@localhost ~]# umount /dev/sdb1
或者
[root@localhost ~]# umount /data
如果出現下面的問題:
[root@localhost ~]# umount /dev/sdb1
umount: /data: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
表示該文件系統正在被使用,無法卸載。在Linux系統中,只有當該文件系統上所有訪問的用戶或進程完成操作並退出后,這個文件系統才能被正常卸載。
一般情況下的原因是因為你在當前的目錄中工作,這時只要退到根目錄下再卸載就可以了。可以使用命令fuser/lsof查看哪些進程正在訪問該文件系統,
之后使用kill命令將進程殺死來進行卸載。
1、fuser -uvm 文件系統或者掛載點,fuser顯示使用指定文件或者文件系統的進程的pid
參數描述:
-u:在每個進程后顯示所屬的用戶名
-m:顯示所有使用指定文件系統的進程,后面可以跟掛載點,或是dev塊設備
-v:詳細的輸出,可以看到占用的進程和PID號
-i:殺死進程前需要用戶確認(和-k一起使用)
-k:殺死訪問指定文件的所有進程(效果類似rm -rf)
例如:
[root@localhost data]# fuser -uvm /data
USER PID ACCESS COMMAND
/data: root kernel mount (root)/data
root 1037 ..c.. (root)bash
root 1485 F.... (root)vim
每種類型的訪問(即每個pid后面)加上一個字母表示:
c - 當前目錄。表示該進程是在該目錄下啟動的
e - 正在運行的可執行文件
f - 打開文件。在默認顯示模式下省略f
F - 打開文件進行寫入。默認顯示模式下省略F
r - 根目錄。表示該目錄是該進程的根目錄
m - mmap'ed文件或共享庫
2、lsof 文件系統或者掛載點
[root@localhost /]# lsof +D /data
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 1485 root 4u REG 8,17 12288 12 /data/.a.swp
如果出現:fuser/lsof: command not found,安裝psmisc/lsof即可。
備注:掛載/取消掛載的限制(重點)
1、根目錄是必須要先於其他mount point被掛載。因為掛載的是所有目錄的根目錄,其他目錄都是由根目錄"/"衍生出來的。
2、掛載點必須是已經存在的目錄。
3、掛載點的指定可以任意,但必須遵守必要的系統目錄架構原則
4、所有掛載點在同一時間只能被掛載一次
5、所有分區在同一時間只能被掛載一次
6、若取消掛載,必須將工作目錄退出掛載點(及其子目錄)之外,且當前磁盤沒有發生讀寫等操作