Linux就该这么学—第九天(存储结构与使用命令管理硬盘)

  • Post author:
  • Post category:linux




第六章-存储结构与管理磁盘

本章将从Linux系统中的文件存储结构开始,讲述文件系统层次标准(Filesystem Hierarchy Standard,FHS)、udev硬件命名规则以及硬盘设备的原理。



6.1 一切从”/”开始

Linux系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、Root、rooT均代表不同的目录,并且文件名称中不得包含斜杠(/)。Linux系统中的文件存储结构如图6-1所示。

第6章 存储结构与管理硬盘第6章 存储结构与管理硬盘

​ 图6-1 Linux系统中的文件存储结构

​ 前文提到的FHS是根据以往无数Linux系统用户和开发者的经验而总结出来的,是用户在Linux系统中存储文件时需要遵守的规则,用于指导用户应该把文件保存到什么位置,以及告诉用户应该在何处找到所需的文件。但是,FHS对于用户来讲只能算是一种道德上的约束,有些用户就是懒得遵守,依然会把文件到处乱放,有些甚至从来没有听说过它。这里并不是号召各位读者去谴责他们,而是建议大家要灵活运用所学的知识,千万不要认准这个FHS协定只讲死道理,不然吃亏的可就是自己了。在Linux系统中,最常见的目录以及所对应的存放内容如表6-1所示。

目录名称 应放置文件的内容
/boot 开机所需文件-内核、开机菜单以及所需配置文件等
/dev 以文件形式存放任何设备与接口
/etc 配置文件
/home 用户主目录
/bin 存放单用户模式下还可以操作的命令
/lib 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数
/sbin 开机过程中需要的命令
/media 用于挂在设备文件的目录
/opt 防止第三方的软件
/root 系统管理员的家目录
/srv 一些网络服务的数据文件目录
/tmp 任何人均可使用的”共享”临时目录
/proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbin linux系统开机时不会使用到的软件/命令/脚本
/usr/share 帮助与说明文件,也可放置共享文件
/var 主要存放经常变化的文件,如日志
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里

绝对路径(absolute path)

相对路径(relative path)




6.2 物理设备的命名规则

在Linux系统中一切都是文件,硬件设备也不例外。既然是文件 ,就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性 以及分区信息等;这对陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出来的信号来管理/dev目录下的设备文件。常见的硬件设备及文件名称如下表所示:


硬件设备 文件名称
IDE设备 /dev/hd[a-d]
SCSI/SATA/U盘 /dev/sd[a-z]
virtio设备 /dev/vd[a-z]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0或/dev/ht0

​ 由于现在的IDE设备已经很少见了,所以一般的硬盘设备都是以“/dev/sd”开头。而一台主机上可以有多块硬盘,因此系统采用a~z来代表26块不同的硬盘(默认从a开始分配,后续的顺序由主板的读取顺序决定),而且硬盘的分区编号也很有讲究:

​ 主分区或扩展分区的编号从1开始,到4结束;

​ 逻辑分区从编号5开始。

第6章 存储结构与管理硬盘第6章 存储结构与管理硬盘

​ 图6-3 第一个扇区中的数据信息

一个磁盘总共可以由四个主分区,可以拿一个准主分区的扇区信息做一个指针,指向另一个分区表,即创建出拓展分区,然后再拓展分区上简历逻辑分区才能使用。

第6章 存储结构与管理硬盘第6章 存储结构与管理硬盘

​ 图6-4 硬盘分区的规划

​ 总的来说,硬盘的命名由主板的读取顺序决定,而对于硬盘的分区可以分为主分区和逻辑分区(4个主分区或3+1种分区等等)主分区的数字可以在划分分区时指定,比如/dev/sda3不一定是第三个主分区(也有可能是第一个即前面没有主分区),但逻辑分区一定是从/dev/sda5开始的(但/dev/sda6也不一定是第二个,也有可能是第一个逻辑分区),即——-分区的数字可以在划分分区时指定,并不一定非得按顺序来(不过默认按顺序来)



大家可以试着解读一下/dev/hdc8代表着什么?



答案模式

**答案:**这是第3块IDE设备(现在比较少见)中编号为8的逻辑分区。



6.3 文件系统与数据资料

​ Linux系统支持数十种文件系统,而最常见的文件系统如下所示。

​ ==Ext2:==最早可追溯到1993年,是Linux系统的第一个商业级文件系统,它基本沿袭了UNIX文件系统的设计标准。但由于不包含日志读写功能,数据丢失的可能性很大,因此大家能不用就不用,或者顶多建议用于SD存储卡或U盘。

​ ==Ext3:==是一款日志文件系统,它会把整个硬盘的每个写入动作的细节都预先记录下来,然后再进行实际操作,以便在发生异常宕机后能回溯追踪到被中断的部分。Ext3能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能100%地保证资料不会丢失。

​ ==Ext4:==Ext3的改进版本,作为RHEL 6系统中默认的文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block(块),从而极大地提高了读写效率。现在很多主流服务器也会使用Ext4文件系统。

​ ==XFS:==是一种高性能的日志文件系统,而且是RHEL 7/8中默认的文件管理系统。它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只需花费极低的计算和存储性能。它支持的最大存储容量为18EB,这几乎满足了所有需求。

​ RHEL 7/8系统中一个比较大的变化就是使用了XFS作为文件系统,这不同于RHEL 6使用的Ext4。从红帽公司官方发布的说明来看,这确实是一个不小的进步,但单纯就测试一款文件系统的“读取”性能来说,到底要读取多少个文件,每个文件的大小是多少,读取文件时的CPU、内存等系统资源的占用率如何,以及不同的硬件配置是否会有不同的影响,这些因素都是不确定的,因此实在不敢直接照抄红帽官方的介绍。我个人认为XFS虽然在性能方面比Ext4有所提升,但绝不是压倒性的,因此XFS文件系统最卓越的亮点应该当属可支持高达18EB的存储容量吧。

​ 在拿到一块新的硬盘存储设备后,

先需要分区

,然后

再格式化文件系统



最后才能挂载并正常使用

。硬盘的分区操作取决于您的需求和硬盘大小;

也可以选择不进行分区,但是必须对硬盘进行格式化处理。




inode与block

​ Linux只是把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格的大小默认为128字节,里面记录着如下信息:

该文件的访问权限(read、write、execute);

该文件的所有者与所属组(owner、group);

该文件的大小(size);

该文件的创建或内容修改时间(Ctime);

该文件的最后一次访问时间(Atime);

该文件的修改时间(Mtime);

文件的特殊权限(SUID、SGID、SBIT);

该文件的真实数据地址(point)。

而文件的实际内容则保存在block块中(大小一般是1KB、2KB或4KB),一个inode的默认大小仅为128字节,记录一个block则消耗4字节。当文件的inode被写满后,Linux系统会自动分配出一个block,专门用于像inode那样记录其他block块的信息,这样把各个block块的内容串到一起,就能够让用户读到完整的文件内容了。对于存储文件内容的block块,有下面两种常见的情况(以4KB大小的block为例进行说明)。

情况1:文件很小(1KB),但依然会占用一个block,因此会潜在地浪费3KB。

情况2:文件很大(5KB),那么会占用两个block(5KB−4KB后剩下的1KB也要占用一个block)。




虚拟文件系统(Virutal File System,VFS)

​ 计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个虚拟文件系统(Virtual File System,VFS)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。图6-6所示为VFS的架构示意图。从中可见,实际文件系统在VFS下隐藏了自己的特性和细节,这样用户在日常使用时会觉得“文件系统都是一样的”,也就可以随意使用各种命令在任何文件系统中进行各种操作了(比如使用cp命令来复制文件)。

第6章 存储结构与管理硬盘第6章 存储结构与管理硬盘

​ 图6-6 VFS的架构示意图

VFS也有点像一个翻译官。我们不需要知道对方的情况,只要告诉VFS想进行的操作是什么,它就会自动判断对方能够听得懂什么指令,然后翻译并交代下去。这可以让用户不用操心这些“小事情”,专注于自己的操作。




Tips

在医学圈里有句这样一句话,“当您开始关注身体某个器官的时候,大概率是它最近不舒服了”。由于VFS真的太好用了,而且几乎不会出现任何问题,所以如果不在这里讲一下它的理论,相信很多同学很可能在多年后都不知道自己用过它。



6.4 挂载硬件设备

mount

格式:“mount 文件系统 挂载目录”

参数 作用
-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统的类型
-o 重新挂载

​ 对于比较新的Linux系统来讲,一般不需要使用-t参数来指定文件系统的类型,Linux系统会自动进行判断(因为在格式化时就以指定文件系统的类型)。而mount中的-a参数则厉害了,它会在执行后自动检查/etc/fstab文件中有无被疏漏挂载的设备文件,如果有,则进行自动挂载操作。

​ 如果在工作中要

挂载一块网络存储设备

,该设备的名字可能会变来变去,这样再写为sdb就不太合适了。这时

推荐用UUID(Universally Unique Identifier,通用唯一识别码)进行挂载操作

。UUID是一串用于标识每块独立硬盘的字符串,具有唯一性及稳定性,特别适合用来挂载网络设备。那么,怎么才能得知独立硬盘的UUID呢?答案是使用blkid命令。

格式:

blkid [设备名]



/etc/fstab开机自动挂载

虽然按照上面的方法执行mount命令后就能立即使用文件系统了,但系统在重启后挂载就会失效,也就是说需要每次开机后都手动挂载一下。这肯定不是我们想要的效果,如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的

填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”

(各字段的意义见表6-4)写入到/etc/fstab文件中。这个文件中包含着挂载所需的诸多信息项目,一旦配置好之后就能一劳永逸了。

字段 意义
设备文件 一般为设备的路径+设备名称,也可以写成UUID
挂载目录 指定要挂载到的目录,需要在挂载前创建好
格式类型 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9600等
权限选项 若设置为defaults,则默认权限为:rw,suid,dev,exec,auto,nouser,async
是否备份 若为1则开机后使用dump进行磁盘备份,为 0则不备份
是否自检 若为1则开机后自动进行磁盘自检,为0则不自检

由于后面需要使用系统镜像制作Yum/DNF软件仓库,我们提前把光盘设备挂载到/media/cdrom目录中。光盘设备的文件系统格式是iso9660:

[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root                     /              xfs        defaults       0 0
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot          xfs        defaults       0 0
/dev/mapper/rhel-swap                     swap           swap       defaults       0 0
/dev/sdb2                                 /backup        ext4       defaults       0 0
/dev/cdrom                                /media/cdrom   iso9660    defaults       0 0

写入到/etc/fstab文件中的设备信息并不会立即生效,需要使用mount -a参数进行自动挂载:

[root@linuxprobe ~]# mount -a


df

df命令用于查看已挂载的磁盘空间使用情况,英文全称为“disk free”,语法格式为“df -Th”



/etc/fstab中的_netdev参数

对于网络存储设备,建议在fstab文件挂在信息中加上_netdev参数。加上后会等联网成功后再尝试挂载这块网络存储设备,从而避免了开机时间过长或失败的情况。



umount

挂载文件系统的目的是为了使用硬件资源,而卸载文件系统则意味不再使用硬件的设备资源。既然挂载操作就是把硬件设备与目录两者进行关联的动作,那么卸载操作只需要说明想要取消关联的设备文件或挂载目录的其中一项即可,一般不需要加其他额外的参数。

umount命令用于卸载设备或文件系统,英文全称为“un mount”,语法格式为“umount [设备文件/挂载目录]”。

[root@linuxprobe ~]# umount /dev/sdb2

如果我们当前就处于设备所挂载的目录,系统会提示该设备繁忙,此时只需要退出到其他目录后再尝试一次就行了。轻松搞定。

[root@linuxprobe ~]# cd /media/cdrom/
[root@linuxprobe cdrom]# umount /dev/cdrom
umount: /media/cdrom: target is busy.
[root@linuxprobe  cdrom]# cd ~
[root@linuxprobe ~]# umount /dev/cdrom
[root@linuxprobe ~]#


lsblk

如果系统中硬盘特别多,分区特别多,我们都不知道它们是否有被使用,又或者是做了些什么。此时,就可以用lsblk命令以树状图的形式列举一下了。

lsblk命令用于查看已挂载的磁盘的空间使用情况,英文全称为“list block id”,输入该命令后按回车键执行即可。

[root@linuxprobe ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   20G  0 disk 
├─sda1          8:1    0    1G  0 part /boot
└─sda2          8:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
sr0            11:0    1  6.6G  0 rom  /media/cdrom


6.5 添加硬盘设备

分区、格式化、挂载



分区

fdisk命令用于新建、修改及删除磁盘的分区表信息,英文全称为“format disk”,语法格式为“fdisk磁盘名称”。

在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。不过与前面讲解的直接写到命令后面的参数不同,这条命令的参数(见表6-5)是交互式的一问一答的形式,因此在管理硬盘设备时特别方便,可以根据需求动态调整。

表6-5 fdisk命令中的参数以及作用

参数 作用
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区表信息
w 保存并退出
q 不保存直接退出

首先使用fdisk命令来尝试管理/dev/sdb硬盘设备。在看到提示信息后输入参数p来查看硬盘设备内已有的分区信息,其中包括了硬盘的容量大小、扇区个数等信息:

[root@linuxprobe ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x88b2c2b0.

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: 0x88b2c2b0

输入参数n尝试添加新的分区。系统会要求用户是选择继续输入参数p来创建主分区,还是输入参数e来创建扩展分区。这里输入参数p来创建一个主分区:

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p

在确认创建一个主分区后,系统要求用户先输入主分区的编号。在前文得知,主分区的编号范围是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

Created a new partition 1 of type 'Linux' and of size 2 GiB.

再次使用参数p来查看硬盘设备中的分区信息。果然就能看到一个名称为/dev/sdb1、起始扇区位置为2048、结束扇区位置为4196351的主分区了。这时千万不要直接关闭窗口,而应该敲击参数w后按回车键,这样分区信息才是真正地写入成功啦。

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: 0x88b2c2b0

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4196351 4194304   2G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

分区信息中第6个字段的Id值是一个编码,用于标识该分区的作用,可帮助用户快速了解该分区的作用,一般没必要修改。使用l参数查看一下磁盘编码都有哪些,然后在6.6节进行SWAP操作时再修改吧:

Command (m for help): 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 or  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 ea  Rufus alignment
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs        
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ee  GPT            
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f1  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f4  SpeedStor      
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      f2  DOS secondary  
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fb  VMware VMFS    
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fc  VMware VMKCORE 
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fd  Linux raid auto
1c  Hidden W95 FAT3 75  PC/IX           bc  Acronis FAT32 L fe  LANstep        
1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot    ff  BBT   

​ 在上述步骤执行完毕之后,Linux系统会自动把这个硬盘主分区抽象成/dev/sdb1设备文件。可以使用file命令查看该文件的属性,但我在讲课和工作中发现,有些时候系统并没有自动把分区信息同步给Linux内核,而且这种情况似乎还比较常见(但不能算作严重的bug)。可以输入

partprobe命令手动将分区信息同步到内核

,而且一般推荐连续两次执行该命令,效果会更好。如果使用这个命令都无法解决问题,那么就重启计算机吧,这个“杀手锏”百试百灵,一定会有用的。

[root@linuxprobe ]# file /dev/sdb1
/dev/sdb1: cannot open `/dev/sdb1' (No such file or directory)
[root@linuxprobe ]# partprobe
[root@linuxprobe ]# partprobe
[root@linuxprobe ]# file /dev/sdb1
/dev/sdb1: block special


格式化

如果硬件存储设备没有进行格式化,则Linux系统无法得知怎么在其上写入数据。因此,在对存储设备进行分区后还需要进行格式化操作。在Linux系统中用于格式化操作的命令是mkfs。这条命令很有意思,因为在Shell终端中输入mkfs名后再敲击两下用于补齐命令的Tab键,会有如下所示的效果:

[root@linuxprobe ~]# mkfs
mkfs         mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat    
mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs     

对!这个mkfs命令很贴心地把常用的文件系统名称用后缀的方式保存成了多个命令文件,用起来也非常简单—mkfs.文件类型名称。例如要将分区为XFS的文件系统进行格式化,则命令应为mkfs.xfs /dev/sdb1。

[root@linuxprobe ~]# mkfs.xfs /dev/sdb1
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命令来查看挂载状态和硬盘使用量信息。

[root@linuxprobe ~]# mkdir /newFS
[root@linuxprobe ~]# mount /dev/sdb1 /newFS
[root@linuxprobe ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               969M     0  969M   0% /dev
tmpfs                  984M     0  984M   0% /dev/shm
tmpfs                  984M  9.6M  974M   1% /run
tmpfs                  984M     0  984M   0% /sys/fs/cgroup
/dev/mapper/rhel-root   17G  3.9G   14G  23% /
/dev/sr0               6.7G  6.7G     0 100% /media/cdrom
/dev/sda1             1014M  152M  863M  15% /boot
tmpfs                  197M   16K  197M   1% /run/user/42
tmpfs                  197M  3.5M  194M   2% /run/user/0
/dev/sdb1              2.0G   47M  2.0G   3% /newFS


du命令

du命令用查看分区或目录所占用的磁盘容量大小,英文全称为“disk usage”,语法格式为“du -sh目录名称”。

既然存储设备已经顺利挂载,接下来就可以尝试通过挂载点目录向存储设备中写入文件了。在写入文件之前,先来看一个用于查看文件数据占用量的du命令。简单来说,该命令就是用来查看一个或多个文件占用了多大的硬盘空间。

在使用Window系统时,我们总会遇到“C盘容量不足,清理垃圾后又很快被占满”的情况。在Linux系统中可以使用du -sh /*命令来查看在Linux系统根目录下所有一级目录分别占用的空间大小,在1s之内就能找到哪个目录占用的空间最多:

[root@linuxprobe ~]# du -sh /*
0	/bin
113M	/boot
0	/dev
29M	/etc
12K	/home
0	/lib
0	/lib64
6.7G	/media
0	/mnt
0	/newFS
0	/opt
0	/proc
8.6M	/root
9.6M	/run
0	/sbin
0	/srv
0	/sys
12K	/tmp
3.5G	/usr
155M	/var

先从某些目录中复制过来一批文件,然后查看这些文件总共占用了多大的容量:

[root@linuxprobe ~]# cp -rf /etc/* /newFS
[root@linuxprobe ~]# ls /newFS
adjtime                     hostname                  profile.d
aliases                     hosts                     protocols
alsa                        hosts.allow               pulse
alternatives                hosts.deny                qemu-ga
anacrontab                  hp                        qemu-kvm
asound.conf                 idmapd.conf               radvd.conf
………………省略部分输入信息………………
[root@linuxprobe ~]# du -sh /newFS
39M /newFS/

细心的读者一定还记得,前面在讲解mount命令时提到,使用mount命令挂载的设备文件会在系统下一次重启的时候失效。如果想让这个设备文件的挂载永久有效,则需要把挂载的信息写入配置文件中:

[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root                     /                      xfs      defaults        0 0
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot                  xfs      defaults        0 0
/dev/mapper/rhel-swap                     swap                   swap     defaults        0 0
/dev/cdrom                                /media/cdrom           iso9660  defaults        0 0 
/dev/sdb1                                 /newFS                 xfs      defaults        0 0 

在这里插入图片描述



版权声明:本文为ggdyb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。