第六章:Linux的磁盘管理
一、查看磁盘或者目录的容量
1.命令df
用户查看已挂载磁盘的总容量、使用容量、剩余容量等;
[root@zl_cloud ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18307072 996588 17310484 6% /
devtmpfs 923888 0 923888 0% /dev
tmpfs 934328 0 934328 0% /dev/shm
tmpfs 934328 8864 925464 1% /run
tmpfs 934328 0 934328 0% /sys/fs/cgroup
/dev/sda1 508588 127320 381268 26% /boot
tmpfs 186868 0 186868 0% /run/user/0
tmpfs 186868 0 186868 0% /run/user/1004
[root@zl_cloud ~]#
- -i:表示查看inodes的使用情况;如已使用100%,即使磁盘空间有富余,也会提示磁 盘空间已满。
- -h:表示使用合适的单位显示;
- -k、-m:分别表示以KB、MB为单位显示;
2.命令du
查看某个目录或文件所占的大小;格式为:du 【-选项】 【文件名或目录名】。不加参数的话只会列出目录(包含子目录的大小)。不指定单位的话默认显示单位为“KB”。
- -a:表示全部文件和目录的大小都列出来;
- -b:表示列出的值以B为单位输出;
- -k:表示以KB的单位输出;
- -m:表示以MB的单位输出;
- -h:表示系统自动调节单位;
- -c:表示最后一行会加总用量;
- -s:表示只列出总和。
二、磁盘的分区和格式化
1.增加虚拟磁盘
点击所需要增加虚拟硬盘的虚拟机,右击设置:
点击添加,在选择硬盘,点击下一步:
默认不需更改,点击下一步:
默认不需更改,点击下一步:
改成你想添加多大的硬盘容量(我填了5g),下面选择将虚拟磁盘存储为单个文件,点击下一步:
自己改一个名字,不改用默认的也可以,然后点击完成:
然后就可以看到新增的硬盘了,最后重启启动一下系统就可以了。
2.命令fdisk
它是Linux下磁盘的分区工具,但是只能划分小于2TB的分区。格式为:fdisk 【-l】 【设备名称】
[root@zl_cloud ~]# fdisk -l /dev/sda1
磁盘 /dev/sda1:524 MB, 524288000 字节,1024000 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@zl_cloud ~]#
若fdisk 不加-l接设备名称时,则会进入对磁盘分区操作的模式:
[root@zl_cloud ~]# fdisk /dev/sda1
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x9399d9fc 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m
命令操作
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 [root@zl_cloud ~]#
to disk and exit
x extra functionality (experts only)
- p:表示打印当前磁盘的分区情况;
- n:表示建立一个新的分区;
- w:表示保存;
- q:表示退出;
- d:表示删除一个分区。
[root@zl_cloud ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x69a1a39a 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x69a1a39a
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): e
分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048): //回车
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759)://回车
将使用默认值 10485759
分区 1 已设置为 Extended 类型,大小设为 5 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x69a1a39a
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 5 Extended
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
这里extended表示拓展分区,primary表示主分区,logical表示逻辑分区。这里表示如果把第1个分区定位拓展分区,并且把全部空间都划分给拓展分区,那么在继续分区时,会提示你选择分区类型为主分区还是逻辑分区。Primary:1,2,3 ;extended:4 ;logical:5开始,因为前四个为主分区或者拓展分区。
Select (default p): l
添加逻辑分区 5
起始 扇区 (4096-10485759,默认为 4096):
将使用默认值 4096
Last 扇区, +扇区 or +size{K,M,G} (4096-10485759,默认为 10485759):+1000M
分区 5 已设置为 Linux 类型,大小设为 1000 MiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x69a1a39a
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 5 Extended
/dev/sdb5 4096 2052095 1024000 83 Linux
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 6
起始 扇区 (2054144-10485759,默认为 2054144):
将使用默认值 2054144
Last 扇区, +扇区 or +size{K,M,G} (2054144-10485759,默认为 10485759):+1000M
分区 6 已设置为 Linux 类型,大小设为 1000 MiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x69a1a39a
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 5 Extended
/dev/sdb5 4096 2052095 1024000 83 Linux
/dev/sdb6 2054144 4102143 1024000 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@zl_cloud ~]#
查看更改后的磁盘:
[root@zl_cloud ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x69a1a39a
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10485759 5241856 5 Extended
/dev/sdb5 4096 2052095 1024000 83 Linux
/dev/sdb6 2054144 4102143 1024000 83 Linux
[root@zl_cloud ~]#
三、格式化磁盘分区
==磁盘分区虽然已经分好了,但是暂时还不能用,需要对每一个分区进行格式化。==所谓格式化就是安装文件系统。
1.命令mke2fs、mkfs.ext2、mkfs.ext3、mkfs.ext4和 mkfs.xfs
mke2fs命令常用的选项如下所示:
- -b:表示分区时设定每个数据区块所占用的空间大小;
- -i:表示设定inode的大小;
- -N:表示设定inode的数量;
- -c:表示在格式化前检测一下磁盘是否有问题;
- -L:表示预设该分区的标签;
- -j:表示建立ext3格式的分区;如果用mkfs.ext3就不用加这个了。
- -t:用来指文件系统的类型;可以是ext2、ext3,也可以是ext4。
[root@zl_cloud ~]# mke2fs -t ext4 /dev/sdb5 //相当于mkfs.ext4 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
64000 inodes, 256000 blocks
12800 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=262144000
8 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@zl_cloud ~]#
然而mke2fs并不支持把分区格式化成CFS,而只能使用mkfs.xfs:
[root@zl_cloud ~]# mkfs.xfs /dev/sdb6
meta-data=/dev/sdb6 isize=256 agcount=4, agsize=64000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=256000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@zl_cloud ~]#
-L选项指定标签,标签会在挂载磁盘时使用,也可以写入配置文件:
[root@zl_cloud ~]# mke2fs -L TEST -t ext4 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=TEST
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
64000 inodes, 256000 blocks
12800 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=262144000
8 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@zl_cloud ~]#
2.命令e2label
该命令用于查看或修改分区的标签,只支持ext格式的文件系统,不支持XFS文件系统。
[root@zl_cloud ~]# e2label /dev/sdb5
TEST
[root@zl_cloud ~]# e2label /dev/sdb5 TEST1
[root@zl_cloud ~]# e2label /dev/sdb5
TEST1
[root@zl_cloud ~]#
四、挂载/卸载磁盘
格式化后的磁盘其实是一个b(块设备文件)。
1.命令mount
挂载前许建立一个挂载点,它是以目录的形式出现的。一旦把某个分区挂载到这个挂载目录下,要往这个目录写数据时,就都会写到该分区中。所以在挂载该分区前,挂载目录必须是个空目录,若不是空目录的话,一旦挂载,该目录以前的东西就看不到了(数据并没有丢失),除非卸载该分区。
建立目录和空白文档(建立空白文档时想展示挂载后该目录以前的东西会怎么变化):
[root@zl_cloud ~]# mkdir /newdir
[root@zl_cloud ~]# touch /newdir/newfile.txt
[root@zl_cloud ~]# ls /newdir/
newfile.txt
[root@zl_cloud ~]#
将/dev/sdb5挂载到/newdir后,原来的txt文件就看不到了。
[root@zl_cloud ~]# mount /dev/sdb5 /newdir/ //也可以用mount LABEL=TEST1 /newdir挂载
[root@zl_cloud ~]# ls /newdir/
lost+found
[root@zl_cloud ~]# df -h | grep -v tmpfs
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 966M 17G 6% /
/dev/sda1 497M 125M 373M 26% /boot
/dev/sdb5 969M 2.5M 900M 1% /newdir
解挂:
[root@zl_cloud ~]# umount /newdir/ //umount可跟挂载点、也可跟分区名。
[root@zl_cloud ~]# df -h | grep tmpfs
devtmpfs 903M 0 903M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
tmpfs 913M 8.7M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
tmpfs 183M 0 183M 0% /run/user/0
[root@zl_cloud ~]# df -h | grep -v tmpfs
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 966M 17G 6% /
/dev/sda1 497M 125M 373M 26% /boot
2./etc/fstab配置文件
[root@zl_cloud ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Mar 4 20:11:10 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=387a5d19-6866-459d-9619-a9dd8fe40aa6 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@zl_cloud ~]#
- 第1列:分区的标识;可以写分区的LABEL、分区的UUID,也可以写分区名(/dev/sda1)
- 第2列:挂载点;
- 第3列:分区的格式;
- 第4列:mount的一些挂载参数;一般情况下直接写defaults即可;
下列是一些常用选项:
async/sync: async表示与磁盘和内存不同步;系统每隔一段时间就会把内存数 据写入磁盘中,而sync则会时时同步内存和磁盘中的数据。
auto/noauto:表示开机自动挂载/不自动挂载;
default:表示按照大多数永久文件系统的默认值设置挂载定义.它包含了rw、 suid、dev、exec、auto、nouser和async;
ro:表示按只读权限挂载;
rw:表示按可读可写权限挂载;
exec/noexec:表示允许/不允许可执行文件执行,但千万不要把根分区挂载为 noexec,否则将无法使用系统,甚至连mount命令都无法使用。
user/nouser:表示允许/不允许root外的其他用户挂载分区。为了安全.清用 nouser;
suid/nosuid:表示允许/不允许分区suid属性,一般设置nosuid;
usrquota:表示启动用户的磁盘配额模式。磁盘配额会针对用户限定他们使用的磁 盘制度;
grquota:表示启动群组的磁盘配额模式。 - 第5列:表示是否被dump备份。1表示备份,0表示不备份。
- 第6列:开机时是否自检磁盘;1、2表示检测,0表示不检测。如果有多个分区需要开机自 动自检,就都设置成2,1检测完后会同时检测2。
在/etc/fstab文件中增加一行来新增分区:
[root@zl_cloud ~]# vi /etc/fstab
LABEL=TEST1 /newdir ext4 defaults 0 0 //加上这个
然后确保之前挂载的/DEV/SDB5已经卸载。
[root@zl_cloud ~]# mount -a
[root@zl_cloud ~]# df -h | grep -v tmpfs
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 966M 17G 6% /
/dev/sda1 497M 125M 373M 26% /boot
/dev/sdb5 969M 2.5M 900M 1% /newdir
[root@zl_cloud ~]#
- -a:会把/etc/fstab中出现的所有磁盘分区挂载上;
- -t:用来指定挂载的分区类型,默认不指定,会自动识别。
- -o:用来指定挂载的分区有哪些特性,及/etc/fstab配置文件中的第4列那些。
[root@zl_cloud ~]# mkdir /newdir/dir1
[root@zl_cloud ~]# mount -o remount,ro,sync /dev/sdb5 /newdir
[root@zl_cloud ~]# mkdir /newdir/dir2
mkdir: 无法创建目录"/newdir/dir2": 只读文件系统
[root@zl_cloud ~]# mount |grep sdb5
/dev/sdb5 on /newdir type ext4 (ro,relatime,sync,seclabel,data=ordered)
-o选项指定了ro参数,所以只读了。
重新挂载恢复读写:
[root@zl_cloud ~]# mount -o remount /newdir/
[root@zl_cloud ~]# mkdir /newdir/dir2
[root@zl_cloud ~]# ls /newdir
dir1 dir2 lost+found
[root@zl_cloud ~]#