Linux管理硬盘设备
不需要为了做这个实验而特意买一块真实的硬盘,而是通过虚拟机软件进行硬件模拟,因此这再次体现出了使用虚拟机软件的好处。具体的操作步骤如下。首先把虚拟机系统关机,稍等几分钟会自动返回到虚拟机管理主界面,然后单击“编辑虚拟机设置”选项,在弹出的界面中单击“添加”按钮,新增一块硬件设备,
- 添加的硬件类型为“硬盘”,然后单击“下一步”
- 选择虚拟硬盘的类型为 SATA,并单击“下一步”
- 选中“创建新虚拟磁盘”单选按钮(而不是其他选项),再次单击“下一步”
- 将“最大磁盘大小”设置为默认的 20GB,单击“下一步”
- 设置磁盘文件的文件名和保存位置(自定义位置即可),直接单击“完成”按钮
按照前文的 udev 服务命名规则,第二个被识别的 SATA 设备应该会被保存为/dev/sdb,这个就是硬盘设备文件了。但在开始使用该硬盘之前还需要进行分区操作,例如从中取出一个 2GB 的分区设备以供后面的操作使用。
fdisk管理磁盘
fdisk 命令用于新建、修改及删除磁盘的分区表信息,英文全称为“format disk”,语法格式为“fdisk 磁盘名称”。
管理硬盘设备最常用的方法就当属 fdisk 命令了。它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。不过与前面讲解的直接写到命令后面的参数不同,这条命令的参数(见表)是交互式的一问一答的形式,因此在管理硬盘设备时特别方便,可以根据需求动态调整。
参数 | 作用 |
---|---|
m | 查看全部可用参数 |
n | 新建分区 |
d | 删除某个分区信息 |
l | 列出所有分区类型 |
t | 改变某个分区类型 |
p | 查看分区表信息 |
w | 保存并退出 |
q | 不保存直接退出 |
使用 fdisk 命令来尝试管理 /dev/sdb 硬盘设备。
[root@serverA ~]# fdisk /dev/sdb //管理/dev/sdb硬盘
参数 p 来查看硬盘设备内已有的分区信息
Command (m for help): p //查看分区信息
/*
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xca9b9564
*/
参数 n 添加新的分区。系统会要求选择继续输入参数 p 来创建主分区,还是输入参数 e 来创建扩展分区。
- 主分区的编号范围是 1~4,因此这里输入默认的 1 就可以了。
- 接下来系统会提示定义起始的扇区位置,这不需要改动,敲击回车键保留默认设置即可,系统会自动计算出最靠前的空闲扇区的位置。
- 系统会要求定义分区的结束扇区位置,这其实就是要去定义整个分区的大小是多少。我们不用去计算扇区的个数,只需要输入 +2G 即可创建出一个容量为 2GB的硬盘分区。
Partition number (1-4, default 1): 1 //输入分区编号
First sector (2048-41943039, default 2048): //起始扇区位置,直接回车默认即可
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +2G //创建一个2G的分区
Created a new partition 1 of type 'Linux' and of size 2 GiB.
Command (m for help): p //查看硬盘设备中的分区信息
/*
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xca9b9564
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
*/
再次使用参数 p 来查看硬盘设备中的分区信息。果然就能看到一个名称为/dev/sdb1、起始扇区位置为 2048、结束扇区位置为 4196351 的主分区了。参数 w 退出后保存按回车键,这样分区信息才是真正地写入成功。
Linux 系统会自动把这个硬盘主分区抽象成/dev/sdb1 设备文件。可以使用 file 命令查看该文件的属性有些时候系统并没有自动把分区信息同步给 Linux 内核,而且这种情况似乎还比较常见(但不能算作严重的 bug)。可以输入 partprobe 命令手动将分区信息同步到内核,而且一般推荐连续两次执行该命令,效果会更好。如果使用这个命令都无法解决问题,那么就重启计算机吧,这个“杀手锏”百试百灵,一定会有用的。
[root@serverA ~]# file /dev/sdb1
/dev/sdb1: block special (8/17)
mkfs格式化磁盘
如果硬件存储设备没有进行格式化,则 Linux 系统无法得知怎么在其上写入数据。因此,在对存储设备进行分区后还需要进行格式化操作。在 Linux 系统中用于格式化操作的命令是 mkfs。这条命令很有意思,因为在 Shell 终端中输入 mkfs 名后再敲击两下用于补齐命令的 Tab键,会有如下所示的效果:
[root@serverA ~]# mkfs //以下为可用的格式
mkfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
例如要将分区进行格式化为 XFS 的文件系统,则命令应为 mkfs.xfs /dev/sdb1。
[root@serverA ~]# mkfs.xfs /dev/sdb1 //把/dev/sdb1格式化为xfs格式
/*
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
*/
完成了存储设备的分区和格式化操作,接下来就是要来挂载并使用存储设备了。与之相关的步骤也非常简单:首先是创建一个用于挂载设备的挂载点目录;然后使用 mount命令将存储设备与挂载点进行关联;最后使用 df -h 命令来查看挂载状态和硬盘使用量信息。(这里设置临时挂载,永久挂载需要修改 /etc/fstab)
[root@serverA ~]# mkdir /news //新建目录
[root@serverA ~]# mount /dev/sdb1 /news //挂载目录
[root@serverA ~]# df -Th //查看挂载使用情况
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 969M 0 969M 0% /dev
tmpfs tmpfs 984M 0 984M 0% /dev/shm
tmpfs tmpfs 984M 18M 966M 2% /run
tmpfs tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs 17G 3.9G 14G 23% /
/dev/sda1 xfs 1014M 152M 863M 15% /boot
tmpfs tmpfs 197M 16K 197M 1% /run/user/42
tmpfs tmpfs 197M 4.0K 197M 1% /run/user/0
/dev/sdb1 xfs 2.0G 47M 2.0G 3% /news
du查看磁盘使用
du 命令用查看分区或目录所占用的磁盘容量大小,英文全称为“disk usage”,语法格式为“ du -sh 目录名称 ”。
既然存储设备已经顺利挂载,接下来就可以尝试通过挂载点目录向存储设备中写入文件了。在写入文件之前,先来看一个用于查看文件数据占用量的 du 命令。简单来说,该命令就是用来查看一个或多个文件占用了多大的硬盘空间。
在使用 Window 系统时,我们总会遇到“C 盘容量不足,清理垃圾后又很快被占满”的情况。在 Linux 系统中可以使用 du -sh /*命令来查看在 Linux 系统根目录下所有一级目录分别占用的空间大小,在 1s 之内就能找到哪个目录占用的空间最多:
[root@serverA ~]# du -sh /*
0 /bin
113M /boot
0 /dev
29M /etc
12K /home
0 /lib
0 /lib64
0 /media
0 /mnt
0 /news
0 /opt
0 /proc
8.6M /root
18M /run
0 /sbin
0 /srv
0 /sys
28K /tmp
3.5G /usr
137M /var
先从某些目录中复制过来一批文件,然后查看这些文件总共占用了多大的容量:
[root@serverA ~]# cp -rf /etc/* /news/
[root@serverA ~]# du -sh /*
29M /etc
29M /news
......省略
添加交换分区
交换(SWAP)分区是一种通过在硬盘中预先划分一定的空间,然后把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。通俗来讲就是让硬盘帮内存分担压力。
但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。
在对/dev/sdb存储设备进行分区操作前,有必要先说一下交换分区的划分建议:在生产环境中,交换分区的大小一般为真实物理内存的 1.5~2 倍。
这里取出一个大小为 4GB 的主分区作为交换分区资源:
Command (m for help): n //新建分区
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p //新建主分区
Partition number (2-4, default 2): //默认直接回车
First sector (4196352-41943039, default 4196352): //默认直接回车
Last sector, +sectors or +size{K,M,G,T,P} (4196352-41943039, default 41943039): +4G //设置大小为4G
Created a new partition 2 of type 'Linux' and of size 4 GiB.
Command (m for help): t //更改分区类型
Partition number (1,2, default 2): 2 //选择新建的第二个分区
Hex code (type L to list all codes): 82 //选择类型为 82 Linux swap / So
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
Command (m for help): p //查看分区信息
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
Disklabel type: dos
Disk identifier: 0xca9b9564
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 83 Linux
/dev/sdb2 4196352 12584959 8388608 4G 82 Linux swap / Solaris
Command (m for help): w //保存并退出
The partition table has been altered.
Syncing disks.
mkswap命令
mkswap 用于交换分区格式化,英文全称为“make swap”,语法格式为“ mkswap 设备名称 ”。
[root@serverA ~]# mkswap /dev/sdb2 //格式化交换分区
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=8a90d1bb-6b1e-4adf-91a2-3809ba4e9cd6
swapon命令
swapon 命令用于激活新的交换分区设备,英文全称为“swap on”,语法格式为“ swapon 设备名称 ”。
使用 swapon 命令把准备好的 SWAP 硬盘设备正式挂载到系统中。可以使用 free -m 命令查看交换分区的大小变化(由 2047MB 增加到 6143 MB):
[root@serverA ~]# free -m //查看交换分区大小
total used free shared buff/cache available
Mem: 1966 716 539 17 710 1050
Swap: 2047 0 2047
[root@serverA ~]# swapon /dev/sdb2 //激活交换分区
[root@serverA ~]# free -m //查看交换分区大小
total used free shared buff/cache available
Mem: 1966 719 536 17 710 1046
Swap: 6143 0 6143
为了能够让新的交换分区设备在重启后依然生效,需要按照下面的格式将相关信息写入配置文件中,并记得保存:
[root@serverA ~]# blkid /dev/sdb2 //查看/dev/sdb2的uuid号
/dev/sdb2: UUID="8a90d1bb-6b1e-4adf-91a2-3809ba4e9cd6" TYPE="swap" PARTUUID="ca9b9564-02"
[root@serverA ~]# vim /etc/fstab //写入fstab文件
UUID="8a90d1bb-6b1e-4adf-91a2-3809ba4e9cd6" swap swap defaults 0 0