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/nvme0n1p1,/dev/nvme0n1p2
  • /dev/vda1,/dev/vda2
  • /dev/xvda1,/dev/xvda2

Linux 文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。

Linux服务器上的文件是按文件系统层次结构访问的。

管理文件系统需要:

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

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

查看设备和文件系统

lsblk命令:查看块设备使用情况

[root@sever ~ 16:48:22]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   59G  0 part 
  ├─centos-root 253:0    0 38.3G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0 18.7G  0 lvm  /home
sr0              11:0    1  4.4G  0 rom  

结果说明:

  • NAME :块设备名。
  • MAJ:MIN :主要(MAJ)和次要(MIN)设备号。
  • RM :指明设备是否是可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
  • SIZE :本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
  • RO :该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
  • TYPE :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
  • MOUNTPOINT :本栏指出设备挂载的挂载点。

df 命令 : 查看文件系统使用情况

[root@sever ~ 16:52:13]# df 
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 2000992       0  2000992    0% /dev
tmpfs                    2013060       0  2013060    0% /dev/shm
tmpfs                    2013060   11748  2001312    1% /run
tmpfs                    2013060       0  2013060    0% /sys/fs/cgroup
/dev/mapper/centos-root 40137576 1642916 38494660    5% /
/dev/sda1                1038336  142260   896076   14% /boot
/dev/mapper/centos-home 19593216   33012 19560204    1% /home
tmpfs                     402616       0   402616    0% /run/user/0



#-h选项,友好显示单位,单位进制是1024
#-T选项,显示文件系统类型
[root@sever ~ 16:53:21]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs                   tmpfs     2.0G     0  2.0G    0% /dev/shm
tmpfs                   tmpfs     2.0G   12M  2.0G    1% /run
tmpfs                   tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        39G  1.6G   37G    5% /
/dev/sda1               xfs      1014M  139M  876M   14% /boot
/dev/mapper/centos-home xfs        19G   33M   19G    1% /home
tmpfs                   tmpfs     394M     0  394M    0% /run/user/0

#查看单个文件系统
[root@sever ~ 16:54:30]# df -hT /boot
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sda1      xfs  1014M  139M  876M   14% /boot

#查看文件或目录存储在哪个设备
[root@sever ~ 16:55:18]# df /tmp
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 40137576 1642916 38494660    5% /

du命令:查看目录和文件占用磁盘大小

#查看目录和子目录占用空间
[root@sever ~ 16:55:38]# du /boot
0	/boot/efi/EFI/centos
0	/boot/efi/EFI
0	/boot/efi
2400	/boot/grub2/i386-pc
3176	/boot/grub2/locale
2504	/boot/grub2/fonts
8096	/boot/grub2
4	/boot/grub
109044	/boot

#只查看目录占用空间
[root@sever ~ 16:57:04]# du -s /boot
109044	/boot

#-h 选项方式显示size
[root@sever ~ 16:57:18]# du -sh /boot
107M	/boot

#可以使用du命令查看根文件系统中哪个文件占了大量空间
#find也可以查看,但是局限明显,面对大量小文件造成的大量空间占用很难搜索

二、挂载和卸载文件系统

1.环境准备

#虚拟机添加一块硬盘 sdb为新加硬盘
[root@sever ~ 17:04:19]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   59G  0 part 
  ├─centos-root 253:0    0 38.3G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0 18.7G  0 lvm  /home
sdb               8:16   0   40G  0 disk 
sr0              11:0    1  4.4G  0 rom  

#必备 格式化文件系统
[root@sever ~ 17:04:24]# mkfs.xfs /dev/sdb

2.挂载文件系统

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

选项说明:

  • -t vfstype,指明文件系统类型。
  • -o options,指明挂载选项。
  • device,指明要挂载的具有文件系统的设备,可以通过UUID=\、\、LABEL=\、PARTLABEL=\、PARTUUID=\等方式指明。例如,/dev/sdb,UUID=“f20547b2-df53-46e5-b526-a8744be26231” 。
  • mountpoint,指明挂载点位置。
#创建挂载点,根据自己需求,随意
[root@sever ~ 17:04:54]# mkdir /data

#显示系统中所有文件系统
[root@sever ~ 17:06:30]# blkid
/dev/sda1: UUID="a668e2a4-1095-4cb6-8289-58f4be070e12" TYPE="xfs" 
/dev/sda2: UUID="3e5oiK-0TAp-uLGP-0wU7-Np1U-EcSk-Fhxt1i" TYPE="LVM2_member" 
/dev/sr0: UUID="2022-07-26-15-09-17-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sdb: UUID="ce577ddd-5558-41cb-a044-b3fb90545279" TYPE="xfs" 
/dev/mapper/centos-root: UUID="98782e36-422f-4b35-a523-99c63c9c70b3" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="9ced8305-ca41-4452-ad11-bc3ae913dc17" TYPE="swap" 
/dev/mapper/centos-home: UUID="8e6955b8-80d0-4281-969f-44ceb1bfc536" TYPE="xfs" 

#挂载
[root@sever ~ 17:06:32]# mount /dev/sdb /data
#验证
[root@sever ~ 17:06:46]# df -h /data
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb         40G   33M   40G    1% /data
#创建文件测试
[root@sever ~ 17:06:56]# touch /data/file{1..9}
[root@sever ~ 17:07:13]# ls /data
file1  file2  file3  file4  file5  file6  file7  file8  file9
[root@sever ~ 17:07:15]# 

#显示系统当前所有挂载
[root@sever ~ 17:08:48]# mount

3.卸载文件系统

#指明设备或者挂载点都可以
[root@sever ~ 17:08:50]# umount /dev/sdb
[root@sever ~ 17:10:06]# umount /data
umount: /data:未挂载
Try 'df --help' for more information.
[root@sever ~ 17:10:20]# df -h /data
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   39G  1.6G   37G    5% /

4.卸载失败处理

1.lsof命令:用于查看系统打开的文件

[root@sever data 17:16:13]# lsof /data
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1262 root  cwd    DIR   8,16      123   64 /data
lsof    1351 root  cwd    DIR   8,16      123   64 /data
lsof    1352 root  cwd    DIR   8,16      123   64 /data

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

2.fuser 命令:用于识别进程打开的文件

[root@sever data 17:18:48]# fuser -m /data
/data:                1262c

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

终止进程,再次卸载

三、综合案例

构建基于 ISO 文件的 yum 仓库

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

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

操作思路:

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

部署web服务器

#安装软件
[root@sever data 17:19:36]# yum install -y nginx

# 设置允许查看目录中清单
[root@sever data 17:21:18]# vim /etc/nginx/nginx.conf
......
http {
    # 添加以下参数
    autoindex on;
......

#打开浏览器测试 输入服务器ip地址,出现页面则成功

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

#设置挂载点/ dev/sr0 = 系统里第一个光驱(CD/DVD/ 虚拟光驱)设备
[root@sever data 17:22:55]# mkdir /usr/share/nginx/html/dvd

#开始挂载
[root@sever ~ 17:25:07]# mount /dev/sr0 /usr/share/nginx/html/dvd
mount: /dev/sr0 写保护,将以只读方式挂载

客户端测试

#保存源
[root@client ~ 16:48:18]# mkdir /etc/yum.repos.d/old
[root@client ~ 17:28:07]# mv /etc/yum.repos.d/*repo /etc/yum.repos.d/old
[root@client ~ 17:28:19]#  vim /etc/yum.repos.d/dvd.repo
[dvd]
name= dvd from local server
baseurl=http://10.1.8.10/dvd
gpgcheck=0

[root@client ~ 17:28:34]# yum clean all
已加载插件:fastestmirror
正在清理软件源: dvd
Cleaning up list of fastest mirrors
Other repos take up 261 M of disk space (use --verbose for details)
[root@client ~ 17:28:39]# yum grouplist
[root@client ~ 17:28:44]# yum groupinstall -y 'Server with GUI'

#如果依赖等级过高,需要降级,重新下载
#切换图形化界面
[root@client ~ 17:32:35]# init 5

四、查找系统中文件

1.locate

locate 命令根据文件名及其路径,在 mlocate 数据库中查找文件,并返回结果。数据库中存放文件和文件路径信息。

常规用户查找时,返回的结果仅包含用户有读取权限的目录树中匹配项。

查找文件前,需要root用户手动执行updatedb命令更新mlocate数据库。

  • -b, --basename

  • -i, --ignore-case

  • -c, --count

  • -r, --regexp

    # 安装mlocate数据库。
    [root@client ~ 17:33:09]#  yum install -y mlocate
    [root@client ~ 17:40:52]# updatedb
    
    #安装新的软件后,检索该软件,需要更新数据
    #示例:
    [root@client ~ 18:28:19]# locate -b httpd
    /usr/share/augeas/lenses/dist/httpd.aug
    /usr/share/augeas/lenses/dist/thttpd.aug
    
    #-i 忽略大小写
    [root@client ~ 18:28:26]# locate PASSWD
    [root@client ~ 18:28:53]# locate -i PASSWD
    /etc/passwd
    /etc/passwd-
    /etc/pam.d/passwd
    /etc/security/opasswd
    
    #-c 返回找到的数量
    [root@client ~ 18:29:05]# locate -c passwd
    126
    [root@client ~ 18:33:55]# locate -r '.http.'
    /boot/grub2/i386-pc/http.mod
    /etc/httpd
    /etc/httpd/conf
    /etc/httpd/conf.d
    /etc/httpd/conf.modules.d
    /etc/httpd/logs
    /etc/httpd/modules
    /etc/httpd/run
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf/magic
    /etc/httpd/conf.d/README
    /etc/httpd/conf.d/autoindex.conf
    /etc/httpd/conf.d/userdir.conf
    /etc/httpd/conf.d/welcome.conf
    /etc/httpd/conf.modules.d/00-base.conf
    
    
    #-r 正则表[root@client ~ 18:33:55]# locate -r '.http.'
    /boot/grub2/i386-pc/http.mod
    /etc/httpd
    /etc/httpd/conf
    /etc/httpd/conf.d
    /etc/httpd/conf.modules.d
    /etc/httpd/logs
    /etc/httpd/modules
    /etc/httpd/run
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf/magic
    /etc/httpd/conf.d/README
    /etc/httpd/conf.d/autoindex.conf
    /etc/httpd/conf.d/userdir.conf
    /etc/httpd/conf.d/welcome.conf
    /etc/httpd/conf.modules.d/00-base.conf
    达式匹配查找[root@client ~ 18:33:55]# locate -r '.http.'
    /boot/grub2/i386-pc/http.mod
    /etc/httpd
    /etc/httpd/conf
    /etc/httpd/conf.d
    /etc/httpd/conf.modules.d
    /etc/httpd/logs
    /etc/httpd/modules
    /etc/httpd/run
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf/magic
    /etc/httpd/conf.d/README
    /etc/httpd/conf.d/autoindex.conf
    /etc/httpd/conf.d/userdir.conf
    /etc/httpd/conf.d/welcome.conf
    /etc/httpd/conf.modules.d/00-base.conf
    
    

2.find(详情请看文件系统管理文章)

Logo

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

更多推荐