原创系统笔记

Linux管理硬盘设备

本文阅读 11 分钟
首页 系统笔记 正文

Linux管理硬盘设备

不需要为了做这个实验而特意买一块真实的硬盘,而是通过虚拟机软件进行硬件模拟,因此这再次体现出了使用虚拟机软件的好处。具体的操作步骤如下。首先把虚拟机系统关机,稍等几分钟会自动返回到虚拟机管理主界面,然后单击“编辑虚拟机设置”选项,在弹出的界面中单击“添加”按钮,新增一块硬件设备,

  1. 添加的硬件类型为“硬盘”,然后单击“下一步”
  2. 选择虚拟硬盘的类型为 SATA,并单击“下一步”
  3. 选中“创建新虚拟磁盘”单选按钮(而不是其他选项),再次单击“下一步”
  4. 将“最大磁盘大小”设置为默认的 20GB,单击“下一步”
  5. 设置磁盘文件的文件名和保存位置(自定义位置即可),直接单击“完成”按钮

按照前文的 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
原创文章,作者:張旭,如若转载,请注明出处:http://www.zxbke.cn/55.html/