搞懂Linux文件系统,99%的操作不求人

搞懂Linux文件系统,99%的操作不求人!

你是否曾经在Linux上操作文件时遇到各种问题,比如挂载不了磁盘、权限不对、文件消失不见?不用担心,这篇文章将帮你搞定99% 的常见Linux文件系统操作,让你不再到处求助!


1. 什么是Linux文件系统?

在Linux中,文件系统(Filesystem 是用于存储和组织数据的结构。它决定了数据如何存储、访问和管理。简单来说,文件系统就像一本书的目录,帮助你快速找到所需的内容。

常见功能:

  • 管理存储空间:决定数据如何分配到磁盘
  • 提供文件结构:让数据存储变得有序
  • 控制访问权限:决定哪些用户能访问哪些数据

Linux支持多种文件系统,如ext4XFSbtrfs,不同文件系统的性能、稳定性和功能有所不同。


2. Linux文件系统的结构概览

2.1 常见的Linux文件系统类型

文件系统适用场景主要特点
ext4服务器 & 个人电脑高稳定性、广泛使用
XFS大型存储系统高吞吐量、支持并行I/O
btrfs高级数据管理快照、压缩、自修复
FAT32/exFATU盘、Windows共享兼容性强

2.2 文件系统层次结构(FHS标准)

Linux遵循Filesystem Hierarchy Standard (FHS),主要目录结构如下:

  • / 根目录,所有文件和目录的起点
  • /home 存放用户的个人数据
  • /etc 存放配置文件
  • /var 存放日志、缓存等数据
  • /mnt/media 用于挂载额外的文件系统

了解这些目录的用途,能让你更快地定位文件。


3. 磁盘与分区管理

Linux中,磁盘管理涉及分区、格式化、挂载等操作。无论是添加新硬盘,还是调整已有磁盘,都需要掌握这些技能。

3.1 查看磁盘信息

在进行磁盘管理之前,先确认系统中的磁盘情况。

lsblk       # 显示块设备(磁盘及其分区)
sudo fdisk -l  # 列出所有磁盘及分区信息(需要root权限)
sudo blkid   # 显示设备UUID、文件系统类型等
df -h        # 以人类可读格式查看磁盘使用情况

示例输出(lsblk):

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  500G  0 disk
├─sda1   8:1    0  100G  0 part /
├─sda2   8:2    0  300G  0 part /data
└─sda3   8:3    0  100G  0 part [SWAP]
sdb      8:16   0  1T    0 disk

这里/dev/sda已经分区,而/dev/sdb尚未分区。


3.2 创建分区

如果lsblk发现某块磁盘未分区(例如 /dev/sdb),我们可以使用 fdisk 进行分区操作。

步骤:

sudo fdisk /dev/sdb

进入fdisk交互模式后,按以下顺序操作:

  1. 创建新分区

    • 输入 n(新建分区)
    • 选择 p(主分区)
    • 直接回车(默认分区号)
    • 直接回车(默认起始扇区)
    • 直接回车(使用整个磁盘,也可以输入大小,如+100G
  2. 写入分区表并退出

    • 输入 w(写入更改并退出)

3.3 重新加载分区表(避免重启)

在某些情况下,fdisk 修改后,Linux不会立即识别新分区,可以用以下方法手动重新加载分区表:

sudo partprobe /dev/sdb

如果 partprobe 不可用,可以使用 kpartx

sudo kpartx -a /dev/sdb

或者重新扫描 SCSI 总线:

echo 1 | sudo tee /sys/class/block/sdb/device/rescan

3.4 格式化新分区

格式化 ext4 文件系统:

sudo mkfs.ext4 /dev/sdb1

如果要使用 XFSbtrfs

sudo mkfs.xfs /dev/sdb1       # 格式化为 XFS
sudo mkfs.btrfs /dev/sdb1     # 格式化为 Btrfs

格式化前检查文件系统类型(避免误格式化已有数据):

sudo blkid /dev/sdb1

3.5 挂载文件系统

/dev/sdb1 挂载到 /mnt

sudo mount /dev/sdb1 /mnt

挂载后,可以使用 df -h 验证是否挂载成功:

df -h | grep /mnt

如果 mount 失败,可能是该设备已经被占用,或者没有格式化正确。可以尝试:

sudo umount /dev/sdb1   # 先卸载(如果已挂载)
sudo fsck -y /dev/sdb1  # 检查并修复文件系统

3.6 配置自动挂载(/etc/fstab

默认情况下,手动挂载的磁盘在系统重启后会失效。为了让它在启动时自动挂载,需要修改 /etc/fstab

  1. 获取分区的 UUID(推荐使用 UUID 挂载,而不是 /dev/sdb1,避免设备名变化)

    sudo blkid /dev/sdb1
    

    示例输出:

    /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-1234-56789abcdef0" TYPE="ext4"
    
  2. 编辑 /etc/fstab

    sudo nano /etc/fstab
    

    添加以下内容:

    UUID=a1b2c3d4-e5f6-7890-1234-56789abcdef0  /mnt  ext4  defaults  0  2
    
    • defaults:默认挂载选项(读写、自动挂载等)
    • 0:是否需要 dump 备份(一般为0)
    • 2fsck 检查顺序,1是根分区,其他分区用2
  3. 应用更改(无需重启):

    sudo mount -a
    
  4. 验证自动挂载是否成功

    mount | grep /mnt
    

3.7 卸载文件系统

如果不再使用某个挂载点,可以卸载:

sudo umount /mnt

如果设备正在使用(导致卸载失败),可以使用以下方式强制卸载:

sudo fuser -vm /mnt   # 显示占用进程
sudo umount -l /mnt   # 延迟卸载(等进程释放后自动卸载)

3.8 小结

操作命令示例
查看磁盘信息lsblkfdisk -lblkid
创建分区fdisk /dev/sdb
重新加载分区表partprobe /dev/sdb
格式化分区mkfs.ext4 /dev/sdb1
挂载分区mount /dev/sdb1 /mnt
配置开机自动挂载编辑 /etc/fstab
卸载分区umount /mnt

4. 文件权限与用户管理

在Linux上,文件权限至关重要,它控制着谁能访问或修改文件。

4.1 chmod 修改文件权限

格式:chmod [权限] [文件]
示例:

chmod 755 myscript.sh  # 所有者可读写执行,其他用户可读执行
chmod +x myscript.sh   # 仅增加执行权限

4.2 chown 修改文件所有者

chown user:group myfile.txt  # 修改所有者为 user,组为 group

4.3 umask 设置默认权限

umask 022  # 默认创建文件权限为 755(所有者可写,其他用户可读)

5. 软链接与硬链接

5.1 软链接(Symbolic Link)

类似Windows快捷方式,指向原文件:

ln -s /var/log/syslog mylog  # 创建指向 /var/log/syslog 的软链接

5.2 硬链接(Hard Link)

让多个文件共享同一个数据块:

ln myfile copyfile  # 复制文件但占用相同存储空间
链接类型是否占用额外空间指向方式
软链接指向文件路径
硬链接指向相同的磁盘块

6. 文件系统健康检查与修复

文件系统损坏可能会导致数据丢失、无法挂载等问题,因此定期检查和修复文件系统是维护 Linux 服务器的重要任务。Linux 提供了一系列工具,如 fscke2fsck,用于检测和修复不同类型的文件系统。


6.1 fsck 进行文件系统检查

fsckFile System Consistency Check)是 Linux 内置的文件系统检查工具,适用于多种文件系统(如 ext4xfsbtrfs 等)。

基本用法
sudo fsck -y /dev/sdb1  # 自动修复错误
  • -y 选项会自动确认修复所有检测到的错误,适用于无人值守的情况。

  • 注意:请不要在已挂载的文件系统上运行 fsck,否则可能导致数据损坏。可以使用 lsblkmount 确保目标分区未挂载:

    mount | grep /dev/sdb1
    

    如果 sdb1 处于挂载状态,先卸载它:

    sudo umount /dev/sdb1
    
强制检查所有文件系统(仅限 ext 系列)

默认情况下,如果文件系统标记为“干净”,fsck 可能不会执行完整检查。可以使用 -f 强制检查:

sudo fsck -f /dev/sdb1

6.2 e2fsck 修复 ext4 文件系统

e2fsckfsckext2/3/4 专用版本,提供更多高级修复选项。

基本检查
sudo e2fsck -f /dev/sdb1
  • -f 强制检查,即使文件系统看起来是干净的。
自动修复所有问题
sudo e2fsck -p /dev/sdb1
  • -p 选项表示“预修复”(preen),它会自动修复安全的问题,并跳过需要用户确认的复杂问题。
彻底修复(慎用)
sudo e2fsck -y /dev/sdb1
  • -y 选项表示“对所有问题自动回答 YES”,可能会导致数据丢失,但在无其他选择时可尝试。

6.3 tune2fs 检查 ext 系列文件系统的健康状态

fsck 通常在 系统启动时 自动运行,除非文件系统被标记为“干净”。可以使用 tune2fs 查看文件系统的 mount countfsck 触发阈值。

查看文件系统信息
sudo tune2fs -l /dev/sdb1 | grep -E "Mount count|Check interval"

示例输出:

Mount count:              5
Maximum mount count:      20
Check interval:           0 (<none>)

这表示 fsck 每 20 次挂载后自动运行一次。

手动设置 fsck 自动检查策略
  • 每 10 次挂载后运行 fsck

    sudo tune2fs -c 10 /dev/sdb1
    
  • 设置每 30 天进行一次 fsck

    sudo tune2fs -i 30d /dev/sdb1
    

6.4 xfs_repair 修复 XFS 文件系统

如果你的文件系统是 XFSfsck 无法直接修复它,而是需要 xfs_repair

检查 XFS 文件系统
sudo xfs_repair -n /dev/sdb1  # 仅检查,不进行修复
修复 XFS 文件系统
sudo umount /dev/sdb1  # 必须先卸载
sudo xfs_repair /dev/sdb1
  • 注意xfs_repair 不能用于挂载中的文件系统,否则可能损坏数据!

6.5 btrfs check 诊断 Btrfs 文件系统

对于 Btrfs 文件系统,可以使用 btrfs check 进行检查和修复。

检查 Btrfs 文件系统
sudo btrfs check --readonly /dev/sdb1
修复 Btrfs 文件系统(慎用)
sudo umount /dev/sdb1
sudo btrfs check --repair /dev/sdb1
  • 警告--repair 选项可能会导致数据丢失,建议先备份数据后再运行。

6.6 修复 / 根分区(系统启动不起来时)

如果 / 根文件系统损坏,导致系统无法正常启动,可以使用 单用户模式恢复模式 进行修复。

方法 1:进入单用户模式(Ubuntu/Debian)
  1. GRUB 启动菜单中,选择你的 Linux 版本,并按 e 进入编辑模式。
  2. 找到 linux 开头的那一行,在结尾添加 singleinit=/bin/bash
    linux /boot/vmlinuz-xxxx root=UUID=xxx ro single
    
  3. Ctrl + XF10 启动系统,进入单用户模式。
  4. 运行 fsck 修复根分区:
    fsck -y /dev/sda1
    
  5. 修复完成后,重启系统:
    reboot
    
方法 2:使用 LiveCD/USB 进行修复
  1. 启动 LiveCD 或 USB(如 Ubuntu 安装盘)。
  2. 打开终端,运行 lsblk 确认根分区设备名(如 /dev/sda1)。
  3. 修复文件系统:
    sudo fsck -y /dev/sda1
    
  4. 修复完成后,重启并移除 USB:
    reboot
    

6.7 小结

操作命令
检查 ext4 文件系统fsck -f /dev/sdb1
修复 ext4 文件系统e2fsck -p /dev/sdb1
查看 fsck 触发策略tune2fs -l /dev/sdb1
调整 fsck 触发策略tune2fs -c 10 /dev/sdb1
检查 XFS 文件系统xfs_repair -n /dev/sdb1
修复 XFS 文件系统xfs_repair /dev/sdb1
检查 Btrfs 文件系统btrfs check --readonly /dev/sdb1
修复 Btrfs 文件系统btrfs check --repair /dev/sdb1
修复根分区fsck -y /dev/sda1

7. 实战:如何在Linux上创建和管理一个新的文件系统?

需求:新买了一块硬盘,如何让它可用?

步骤

  1. 查看磁盘信息
    lsblk
    
  2. 分区
    sudo fdisk /dev/sdb
    
  3. 格式化
    sudo mkfs.ext4 /dev/sdb1
    
  4. 挂载
    sudo mount /dev/sdb1 /mnt
    
  5. 配置fstab(自动挂载)
    sudo nano /etc/fstab
    
    添加:
    /dev/sdb1  /mnt  ext4  defaults  0  2
    

8. 高级技巧:调整和优化文件系统

8.1 resize2fs 调整ext4大小

sudo resize2fs /dev/sdb1 20G  # 调整文件系统大小为20G

8.2 tune2fs 调整文件系统参数

sudo tune2fs -c 10 /dev/sdb1  # 每挂载10次后进行检查

8.3 btrfs 快照

btrfs subvolume snapshot /data /backup

结语

恭喜你!现在你已经掌握了Linux文件系统的核心操作:
✅ 磁盘管理
✅ 文件权限设置
✅ 链接与权限控制
✅ 文件系统健康检查
✅ 实战创建文件系统

无论是挂载磁盘、修复系统,还是管理文件权限,这篇文章都能帮你迅速上手!

如果你觉得这篇文章对你有帮助,记得收藏并分享给你的朋友,一起提升Linux技能! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值