linux分区与挂载
分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁盘使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。
通常情况下,为磁盘分区通常使用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、若取消挂载,必须将工作目录退出挂载点(及其子目录)之外,且当前磁盘没有发生读写等操作