Linux 文件系统基本管理

识别文件系统和设备

Linux 中设备

在Linux中,对存储设备的访问由特殊类型文件-块设备(block)提供。挂载块设备前,必须先使用文件系统对其进行格式化。

块设备文件与其他的设备文件一起存储在/dev目录中。设备文件是由操作系统自动创建的。

常见的不同类型接口块设备:

  • 接口:SATA/SAS/USB/SCSI,名称:/dev/sda、/dev/sdb …
  • 接口:virtio-blk,虚拟机磁盘,名称:/dev/vda、/dev/vdb …
  • 接口:NVMe SSD,名称:/dev/nvme0n1、/dev/nvme1n1…
  • 接口:SD/MMC/eMMC,名称:/dev/mmcblk0,/dev/mmcblk1 …

通常,不会将整个存储设备格式化为一个文件系统中,而是将硬盘驱动器划分为多个逻辑存储单元, 这些单元称为分区。各种分区使用不同的文件系统进行格式化或用于不同的用途。 例如,一个分区可以包含用户目录,而另一个分区可以包含系统数据和日志。 如果用户用数据填充主目录分区,则系统分区可能仍然有可用空间。

  • /dev/sda第一个分区为/dev/sda1,第二个分区为/dev/sda2,以此类推。
  • /dev/vda1,/dev/vda2
  • /dev/xvda1,/dev/xvda2
  • /dev/nvme0n1p1,/dev/nvme0n1p2

Linux 文件系统

Linux文件系统采用树形结构

image-20221222084117872

管理文件系统需要:

  • 确定存储设备的空间使用情况以及文件系统层次结构中受影响的目录。
  • 存储设备发生故障,我们需要知道哪些文件系统存在风险。

要让文件系统的内容在文件系统层次结构中可用,必须将它挂载到一个空目录上,该目录被称为挂载点

查看设备和文件系统

lsblk 命令

查看块设备使用情况。

[root@server ~ 18:33:49]# lsblk 
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdb               8:16   0   100G  0 disk 
└─sdb1            8:17   0    80G  0 part 
sr0              11:0    1   4.4G  0 rom  

lsblk命令用来查看块设备情况

  • NAME:块设备名称
  • MAJ:MIN:主要和次要设备号
  • SIZE:设备容量大小
  • RO:用来表示设备是否为只读。所有设备的RO值都不是0,说明他们不是只读
  • TYPE:本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)
  • MOUNTPOINT:指出设备挂载的载点
df命令

查看文件系统使用情况

[root@server ~ 18:34:09]# df
文件系统                    1K-块    已用      可用 已用% 挂载点
devtmpfs                  1995980       0   1995980    0% /dev
tmpfs                     2013056       0   2013056    0% /dev/shm
tmpfs                     2013056   12516   2000540    1% /run
tmpfs                     2013056       0   2013056    0% /sys/fs/cgroup
/dev/mapper/centos-root  52403200 5348976  47054224   11% /
/dev/sda1                 1038336  177432    860904   18% /boot
/dev/mapper/centos-home 152092100   40736 152051364    1% /home
tmpfs                      402612      12    402600    1% /run/user/42
tmpfs                      402612       0    402612    0% /run/user/1000

可以通过增加选项来观看的更加直观

  • -h选项,更好的去查看,会把存储单位换算为G,单位进制1024
  • -T选项,显示文件系统类型,查看该文件系统属于什么类型
  • -H选项,也是换算单位更直观的去查看,单位进制是1000
#查看当个文件系统
[root@server ~ 18:45:45]# df -hT /root/
文件系统                类型  容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs    50G  5.2G   45G   11% /

#查看目录或者文件属于哪个设备下
[root@server ~ 18:46:00]# df /tmp
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 52403200 5348920 47054280   11% /

du 命令

查看目录和文件占用磁盘空间大小。

#查看/root目录以及下面子目录的占用空间
[root@server ~ 18:48:49]# du /root
4	/root/.cache/dconf
4	/root/.cache/abrt
8	/root/.cache/imsettings
  • -s:查看占用空间
[root@server ~ 18:49:01]# du -s /root
27696	/root
  • -sh
[root@server ~ 18:50:33]# du -sh /root
28M	/root
案例

生成一个大小为4GB的文件,听过du一步一步的去找到这个文件

2026-07-30 19:04:15 du -sk /*|sort -n
通过du -sk /*|sort -n一步步找到
[root@server ~ 19:09:20]# du -sk /*|sort -n
...
376	/tmp
7616	/home
12528	/run
27696	/root
43232	/etc
144216	/boot
1307272	/var
8065144	/usr#usr文件大小很大

[root@server ~ 19:10:00]# du -sk /usr/*|sort -n
...
13992	/usr/include
27740	/usr/local
66944	/usr/sbin
73856	/usr/libexec
147192	/usr/bin
877640	/usr/lib
1217716	/usr/lib64
5640064	/usr/share

[root@server ~ 19:10:39]# du -sk /usr/share/*|sort -n
...
62832	/usr/share/man
83908	/usr/share/icons
122840	/usr/share/fonts
213252	/usr/share/help
451260	/usr/share/locale
4286308	/usr/share/doc

[root@server ~ 19:11:09]# du -sk /usr/share/doc/*|sort -n
...
1060	/usr/share/doc/pam-1.1.8
1192	/usr/share/doc/python-kitchen-1.1.1
1216	/usr/share/doc/postfix-2.10.1
1340	/usr/share/doc/pcre-devel-8.32
4376	/usr/share/doc/gcc-4.8.5
4194316	/usr/share/doc/dhclient-4.2.5

[root@server ~ 19:11:58]# du -sk /usr/share/doc/dhclient-4.2.5/*|sort -n
4	/usr/share/doc/dhclient-4.2.5/dhclient6.conf.example
4	/usr/share/doc/dhclient-4.2.5/dhclient.conf.example
4	/usr/share/doc/dhclient-4.2.5/README.dhclient.d
4194304	/usr/share/doc/dhclient-4.2.5/bigfile-4G
[root@server ~ 19:12:24]# ^C
[root@server ~ 19:12:28]# du -sk /usr/share/doc/dhclient-4.2.5/bigfile-4G*|sort -n
4194304	/usr/share/doc/dhclient-4.2.5/bigfile-4G
#最后查找到文件

#也可以通过df查看文件系统看找到哪个文件系统内存变化较大的,直接查看

挂载和卸载文件系统

文件系统的怪载相当于有一块硬盘,把存储空间和一个空目录绑定 ,存储到这个目录下的信息就存储到这个硬盘上去。

环境准备

虚拟机上我们添加一块硬盘

[root@server ~ 19:19:49]# lsblk /dev/sdb
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  100G  0 disk 

#格式话文件系统
[root@server ~ 19:20:28]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=6553600 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26214400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12800, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

挂载文件系统

当需要适用文件系统的时候,通过mount命令挂载。

mount 命令语法:

mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint

选项说明:

  • -t vfstype,指明文件系统类型。
  • -o options,指明挂载选项。
  • device,指明要挂载的具有文件系统的设备,可以通过UUID=\、\、LABEL=\、PARTLABEL=\、PARTUUID=\等方式指明。例如,/dev/sdb,UUID=“f20547b2-df53-46e5-b526-a8744be26231” 。
  • mountpoint,指明挂载点位置。
#创建挂在点,需要先创建一个空目录
[root@server ~ 19:23:31]# mkdir /data
[root@server ~ 19:23:52]# mount /dev/sdb /data

#查看挂载点
[root@server ~ 19:24:44]# lsblk 
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdb               8:16   0   100G  0 disk /data
sr0              11:0    1   4.4G  0 rom  
#新增硬盘挂载点在/data

#创建几个文件测试一下
[root@server ~ 19:26:11]# touch /data/file-{1..3}
[root@server ~ 19:26:57]# ls /data/
file-1  file-2  file-3

卸载文件系统

当文件系统不使用的时候,通过 umount 命令卸载。

umount命令语法:

umount device | dir

可以通过指定设备或者挂载点,卸载文件系统。

示例:

[root@server ~ 19:27:07]# umount /data 
[root@server ~ 19:28:18]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdb               8:16   0   100G  0 disk 
sr0              11:0    1   4.4G  0 rom  

卸载失败处理

在卸载时又时可能会发现卸载失误,这就类似于在windows系统中时,你使用u盘正在传输文件的时候去弹出u盘,系统会显示当前正在工作,弹出失败。删除文件时显示文件已经运行或者被打开一个道理,

实验一下

[root@server data 19:31:52]# lsof /data/
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1983 root  cwd    DIR   8,16       58   64 /data
lsof    2663 root  cwd    DIR   8,16       58   64 /data
lsof    2664 root  cwd    DIR   8,16       58   64 /data
[root@server data 19:32:24]# umount /data 
umount: /data:目标忙。
        (有些情况下通过 lsof(8) 或 fuser(1) 可以
         找到有关使用该设备的进程的有用信息)

#当前环境下data已经打开所以删除不了,我们清空一下环境
[root@server data 19:32:42]# cd
[root@server ~ 19:33:27]# lsof /data/
[root@server ~ 19:33:31]# umount /data 
[root@server ~ 19:33:39]# lsblk 
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part 
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 145.1G  0 lvm  /home
sdb               8:16   0   100G  0 disk 
sr0              11:0    1   4.4G  0 rom  
lsof 命令

lsof,list open files,用于查看系统打开的文件。

lsof 命令语法:

lsof [options] [names]

常用选项:

  • -i,查看打开的 Internet 文件。例如 -i @10.1.8.20:22-i :80
  • -p pid,根据进程PID查找特定进程打开的文件。
  • -u uid,根据用户 uid查找特定用户打开的文件。
  • names,是文件或者文件系统设备。
fuser 命令

fuser,用于识别进程打开的文件。

fuser 命令语法:

fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...

常用选项:

  • -k,杀死这些正在访问这些文件的进程。除非使用-signal修改信号,否则将发送SIGKILL信号。
  • -signal,指定发送的信号(signal 使用特定信号替换),缺省信号SIGKILL。
  • -i,交互模式杀死进程。
  • -l,列出所有已知的信号名称。
  • -m,列出文件系统被哪些程序使用。
  • -n,空间,选择不同的名字空间,可是file,udp,tcp。默认是file,也就是文件。
  • -4,仅查询IPV4套接字
  • -6,仅查询IPV6套接字。
  • -u,指定用户名。
# 新开窗口查看哪个进程在使用挂载点
[root@centos7 ~]# fuser -m /data
/data:                1508c

终止进程,再次卸载

# 返回家目录,再次卸载
[root@centos7 data]# cd 
[root@centos7 ~]# umount /data

案例3:构建基于 ISO 文件的 yum 仓库

client 想安装图形化,但仓库来源于Internet,希望使用本地仓库以提高速度。

现要求在server服务器上部署nginx服务发布dvd光盘中的仓库。

操作思路:

  1. server上部署并配置nginx服务
  2. server上挂载 ISO 文件到nginx服务网站目录
  3. client创建指向server上web站点仓库
  4. 测试

部署web服务器

#首先需要先下载nginx服务,server服务器上将iso文件挂载到nginx服务网站目录
客户端创建指向server上web站点仓库

# 安装软件
[root@server ~ 11:22:04]# yum install -y nginx

# 设置允许查看目录中清单
[root@server ~ 11:40:38]# vim /etc/nginx/nginx.conf
......
http {
    # 添加以下参数
    autoindex on;
......
[root@server ~ 11:42:06]# systemctl enable nginx.service --now
# 准备测试文件
[root@server ~ 11:43:26]# mv /usr/share/nginx/html/index.html{,.ori}
[root@server ~ 11:43:36]# echo welcome to Nginx website. > /usr/share/nginx/html/index.html

# 客户端测试
[root@client ~ 11:44:18]# curl http://server
welcome to Nginx website.

挂载光盘到web服务器发布目录

确保光盘关联正确的iso并连接到虚拟机

[root@server ~ 11:44:47]# mkdir /usr/share/nginx/html/dvd
[root@server ~ 11:45:49]# mount /dev/sr0 /usr/share/nginx/html/dvd
mount: /dev/sr0 is write-protected, mounting read-only

客户端测试

[root@client ~ 11:44:23]# mkdir /etc/yum.repos.d/old
[root@client ~ 11:46:19]# mv /etc/yum.repos.d/*repo /etc/yum.repos.d/old
[root@client ~ 11:46:28]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name= dvd from local server
baseurl=http://10.1.8.10/dvd
gpgcheck=0

[root@client ~ 11:47:09]# yum clean all

[root@client ~ 11:47:51]# yum grouplist
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
......

[root@client ~ 11:48:08]# yum groupinstall -y 'Server with GUI'

# 启动图形化
[root@client ~ 11:49:08]# init 5

# 切换到字符
[root@client ~ 11:50:08]# init 3
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐