Linux基础教程 第九课:磁盘管理和文件系统

浏览量:25 次 发布时间:2026-01-18 14:49 作者:明扬工控商城 下载docx

最近更新:Linux基础教程 第15课:Linux内核和驱动管理


好的,我们继续第九课。今天学习Linux的磁盘管理和文件系统,这是系统管理的重要技能。


第一部分:磁盘基础概念

1.1 磁盘设备命名

在Linux中,一切皆文件,磁盘设备也以文件形式存在。


bash

# 查看所有磁盘设备

ls /dev/sd*  # SATA/SCSI磁盘

ls /dev/hd*  # IDE磁盘(老式)

ls /dev/nvme*  # NVMe固态硬盘


# 设备命名规则:

# /dev/sda  第一块SATA磁盘

# /dev/sda1 第一块磁盘的第一个分区

# /dev/sda2 第一块磁盘的第二个分区

# /dev/sdb  第二块SATA磁盘

1.2 查看磁盘信息

bash

# 查看所有磁盘和分区

sudo fdisk -l


# 查看磁盘使用情况(最常用)

df -h

df -Th  # 显示文件系统类型


# 以可读格式显示磁盘空间

du -sh /home  # 查看目录大小

du -ah /home | sort -rh | head -10  # 查看最大文件


# 查看磁盘和分区树状结构

lsblk

lsblk -f  # 显示文件系统信息


# 查看磁盘详细信息

sudo hdparm -I /dev/sda  # 查看SATA磁盘信息

第二部分:磁盘分区

2.1 使用fdisk分区

fdisk是传统的分区工具,支持MBR分区表(最多4个主分区)。


bash

# 查看磁盘分区

sudo fdisk -l /dev/sda


# 对磁盘进行分区(以/dev/sdb为例)

sudo fdisk /dev/sdb

fdisk交互命令:


m:显示帮助菜单


p:显示分区表


n:创建新分区


d:删除分区


t:更改分区类型


w:保存并退出


q:不保存退出


实际操作演示:


bash

# 假设我们要在/dev/sdb上创建两个分区

sudo fdisk /dev/sdb


# 在fdisk中依次输入:

# n  (新建分区)

# p  (主分区)

# 1  (分区号1)

# 回车 (起始扇区,默认)

# +10G (分区大小,10GB)

# n  (再新建分区)

# p  (主分区)

# 2  (分区号2)

# 回车 (起始扇区,默认)

# 回车 (使用所有剩余空间)

# w  (保存并退出)


# 让内核重新读取分区表

sudo partprobe /dev/sdb

2.2 使用parted分区

parted支持GPT分区表,适合大容量磁盘(>2TB)。


bash

# 启动parted

sudo parted /dev/sdb


# parted常用命令:

(parted) print          # 显示当前分区

(parted) mklabel gpt    # 创建GPT分区表(会清除所有数据!)

(parted) mkpart primary ext4 1MiB 10GiB  # 创建分区

(parted) set 1 boot on  # 设置启动标志

(parted) quit           # 退出


# 或使用命令行模式

sudo parted /dev/sdb mklabel gpt

sudo parted /dev/sdb mkpart primary ext4 1MiB 10GiB

2.3 使用gdisk分区

gdisk是专门用于GPT分区表的工具。


bash

sudo gdisk /dev/sdb

# 操作类似fdisk,但支持GPT

第三部分:文件系统创建与管理

3.1 创建文件系统(格式化)

分区后需要创建文件系统才能使用。


bash

# 创建ext4文件系统(最常用)

sudo mkfs.ext4 /dev/sdb1


# 创建xfs文件系统(高性能)

sudo mkfs.xfs /dev/sdb1


# 创建FAT32文件系统(兼容Windows)

sudo mkfs.fat -F32 /dev/sdb1


# 创建NTFS文件系统(需要安装ntfs-3g)

sudo apt install ntfs-3g

sudo mkfs.ntfs /dev/sdb1


# 创建交换分区

sudo mkswap /dev/sdb2

sudo swapon /dev/sdb2  # 启用交换分区

3.2 查看文件系统信息

bash

# 查看文件系统类型

sudo blkid /dev/sdb1


# 查看ext4文件系统详细信息

sudo tune2fs -l /dev/sdb1


# 查看xfs文件系统信息

sudo xfs_info /dev/sdb1


# 检查文件系统错误

sudo fsck /dev/sdb1

sudo e2fsck -f /dev/sdb1  # ext文件系统检查

3.3 调整文件系统大小

bash

# 扩展ext2/3/4文件系统(需要先扩展分区)

sudo resize2fs /dev/sdb1


# 扩展xfs文件系统

sudo xfs_growfs /mount/point


# 缩小ext文件系统(危险!需要先卸载)

sudo umount /dev/sdb1

sudo e2fsck -f /dev/sdb1

sudo resize2fs /dev/sdb1 5G  # 缩小到5G

第四部分:挂载文件系统

4.1 手动挂载

bash

# 创建挂载点

sudo mkdir /mnt/mydisk


# 挂载分区

sudo mount /dev/sdb1 /mnt/mydisk


# 查看挂载情况

mount | grep /mnt/mydisk

df -h /mnt/mydisk


# 卸载分区

sudo umount /mnt/mydisk

# 或

sudo umount /dev/sdb1

4.2 自动挂载(/etc/fstab)

编辑fstab文件让系统启动时自动挂载。


bash

# 备份fstab

sudo cp /etc/fstab /etc/fstab.backup


# 编辑fstab

sudo vim /etc/fstab

fstab文件格式:


text

设备文件  挂载点  文件系统类型  挂载选项  dump  fsck

示例:


text

# 使用设备名(不推荐,可能变化)

/dev/sdb1  /mnt/mydisk  ext4  defaults  0  0


# 使用UUID(推荐)

UUID=12345678-1234-1234-1234-123456789012  /mnt/mydisk  ext4  defaults  0  0


# 使用卷标

LABEL=MyData  /mnt/mydisk  ext4  defaults  0  0

获取UUID:


bash

sudo blkid

ls -l /dev/disk/by-uuid/

测试fstab配置:


bash

# 挂载所有fstab中的分区

sudo mount -a


# 检查是否有错误

sudo mount -a 2>&1 | grep -i error

4.3 挂载选项

bash

# 只读挂载

sudo mount -o ro /dev/sdb1 /mnt/mydisk


# 允许执行二进制文件

sudo mount -o exec /dev/sdb1 /mnt/mydisk


# 禁止执行二进制文件(安全)

sudo mount -o noexec /dev/sdb1 /mnt/mydisk


# 允许用户挂载

sudo mount -o user /dev/sdb1 /mnt/mydisk


# 多个选项组合

sudo mount -o defaults,noexec,nosuid /dev/sdb1 /mnt/mydisk

第五部分:交换空间管理

5.1 创建交换文件

bash

# 创建交换文件(2GB大小)

sudo fallocate -l 2G /swapfile


# 如果fallocate失败,使用dd

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048


# 设置权限

sudo chmod 600 /swapfile


# 格式化为交换空间

sudo mkswap /swapfile


# 启用交换文件

sudo swapon /swapfile


# 查看交换空间

free -h

swapon --show

5.2 永久启用交换文件

bash

# 编辑fstab

sudo vim /etc/fstab


# 添加一行

/swapfile none swap sw 0 0


# 或者用UUID

sudo findmnt -no SOURCE /swapfile | xargs sudo swaplabel -U | cut -d' ' -f3

# 将输出的UUID添加到fstab

5.3 调整交换空间使用倾向

bash

# 查看当前swappiness值(0-100)

cat /proc/sys/vm/swappiness


# 临时修改

sudo sysctl vm.swappiness=10


# 永久修改

sudo vim /etc/sysctl.conf

# 添加:vm.swappiness=10

sudo sysctl -p

第六部分:逻辑卷管理(LVM)

6.1 LVM基本概念

PV:物理卷(Physical Volume)


VG:卷组(Volume Group)


LV:逻辑卷(Logical Volume)


6.2 创建LVM

bash

# 安装LVM工具

sudo apt install lvm2


# 创建物理卷

sudo pvcreate /dev/sdb1

sudo pvcreate /dev/sdc1


# 查看物理卷

sudo pvdisplay

sudo pvs


# 创建卷组

sudo vgcreate myvg /dev/sdb1 /dev/sdc1


# 查看卷组

sudo vgdisplay

sudo vgs


# 创建逻辑卷

sudo lvcreate -L 20G -n mylv myvg  # 创建20G的逻辑卷

sudo lvcreate -l 100%FREE -n datalv myvg  # 使用所有剩余空间


# 查看逻辑卷

sudo lvdisplay

sudo lvs


# 创建文件系统

sudo mkfs.ext4 /dev/myvg/mylv

6.3 扩展LVM

bash

# 扩展卷组(添加新物理卷)

sudo vgextend myvg /dev/sdd1


# 扩展逻辑卷

sudo lvextend -L +10G /dev/myvg/mylv  # 增加10G

sudo lvextend -l +100%FREE /dev/myvg/mylv  # 使用所有空闲空间


# 扩展文件系统(ext4)

sudo resize2fs /dev/myvg/mylv


# 扩展文件系统(xfs)

sudo xfs_growfs /dev/myvg/mylv

6.4 缩小LVM(谨慎!)

bash

# 先备份数据!

# 卸载文件系统

sudo umount /dev/myvg/mylv


# 检查文件系统

sudo e2fsck -f /dev/myvg/mylv


# 缩小文件系统

sudo resize2fs /dev/myvg/mylv 10G


# 缩小逻辑卷

sudo lvreduce -L 10G /dev/myvg/mylv


# 重新挂载

sudo mount /dev/myvg/mylv /mnt/mylv

第七部分:磁盘配额

7.1 启用磁盘配额

bash

# 安装配额工具

sudo apt install quota


# 编辑fstab,在挂载选项中添加usrquota,grpquota

# 例如:UUID=... /home ext4 defaults,usrquota,grpquota 0 0


# 重新挂载文件系统

sudo mount -o remount /home


# 创建配额数据库

sudo quotacheck -cug /home

sudo quotacheck -avugm


# 启用配额

sudo quotaon -av

7.2 设置用户配额

bash

# 编辑用户配额

sudo edquota -u username


# 会打开编辑器,内容类似:

# Disk quotas for user username (uid 1000):

#   Filesystem                   blocks       soft       hard     inodes     soft     hard

#   /dev/sda1                      24          0          0          3        0        0

# blocks: 已使用的磁盘空间(单位:KB)

# soft: 软限制(超过会有警告,宽限期后禁止)

# hard: 硬限制(绝对禁止超过)

# inodes: 文件数量限制


# 设置示例(限制100MB软限制,120MB硬限制):

#   /dev/sda1                      24       102400     122880          3        0        0


# 设置宽限期(默认7天)

sudo edquota -t


# 复制配额设置到其他用户

sudo edquota -p username user2 user3 user4

7.3 查看配额信息

bash

# 查看用户配额

sudo quota -u username


# 查看所有用户配额报告

sudo repquota /home


# 查看自己的配额

quota

第八部分:RAID管理

8.1 软件RAID

bash

# 安装mdadm

sudo apt install mdadm


# 创建RAID1(镜像)

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc


# 创建文件系统

sudo mkfs.ext4 /dev/md0


# 查看RAID状态

cat /proc/mdstat

sudo mdadm --detail /dev/md0


# 保存RAID配置

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

sudo update-initramfs -u


# 挂载使用

sudo mkdir /mnt/raid1

sudo mount /dev/md0 /mnt/raid1

8.2 管理RAID

bash

# 添加热备盘

sudo mdadm /dev/md0 --add /dev/sdd


# 从RAID中移除故障磁盘

sudo mdadm /dev/md0 --remove /dev/sdb


# 停止RAID

sudo mdadm --stop /dev/md0


# 重新组装RAID

sudo mdadm --assemble /dev/md0 /dev/sdb /dev/sdc

第九部分:练习任务

练习1:磁盘分区和挂载

使用fdisk在第二块磁盘上创建三个分区:


一个10G的ext4分区


一个5G的xfs分区


一个2G的交换分区


创建文件系统并挂载到不同目录


配置自动挂载


练习2:LVM实践

创建两个物理卷


创建一个卷组


创建两个逻辑卷(一个10G,一个使用剩余空间)


扩展第一个逻辑卷


创建快照(lvcreate -s)


练习3:磁盘配额

在/home分区启用配额


为两个用户设置不同的磁盘限制


测试配额是否生效


练习4:RAID配置

创建RAID0(条带化,提高性能)


创建RAID1(镜像,提高可靠性)


比较两者的性能和容错能力


第十部分:故障排除

10.1 磁盘空间不足

bash

# 查找大文件

sudo find / -type f -size +100M 2>/dev/null | xargs ls -lh


# 查找大目录

sudo du -sh /* 2>/dev/null | sort -rh | head -20


# 清理缓存

sudo apt clean  # 清理软件包缓存

sudo journalctl --vacuum-time=7d  # 清理7天前的日志


# 查找并删除重复文件

sudo fdupes -r /home

10.2 文件系统损坏

bash

# 检查文件系统(必须先卸载)

sudo umount /dev/sdb1

sudo fsck /dev/sdb1


# 修复ext文件系统

sudo e2fsck -f -y /dev/sdb1


# 修复xfs文件系统

sudo xfs_repair /dev/sdb1


# 检查磁盘坏道

sudo badblocks -v /dev/sdb

10.3 恢复误删文件

bash

# 安装恢复工具

sudo apt install extundelete  # 用于ext文件系统

sudo apt install testdisk     # 通用恢复工具


# 停止写入数据,立即恢复

sudo umount /dev/sdb1

sudo extundelete /dev/sdb1 --restore-all

今日总结

今天我们学习了:


磁盘基础知识:设备命名、查看磁盘信息


磁盘分区:使用fdisk、parted、gdisk


文件系统:创建、管理、调整大小


挂载管理:手动挂载、自动挂载、挂载选项


交换空间:创建和管理swap


LVM:物理卷、卷组、逻辑卷的管理


磁盘配额:限制用户磁盘使用


RAID:软件RAID的配置和管理


重要提醒:


操作磁盘前一定要备份重要数据


修改分区表可能造成数据丢失


LVM缩小操作要特别小心


生产环境操作前先在测试环境练习


这些技能对于系统管理员来说至关重要。建议在虚拟机中多加练习,熟悉每个命令的用法。


有问题吗?完成练习后,我们可以继续第十课:安全基础和权限管理。


明扬工控商城

推荐阅读:

Linux基础教程 第20课:Linux安全攻防和渗透测试基础

Linux基础教程 第19课:性能调优和容量规划

Linux基础教程 第18课:Linux云计算基础

Linux基础教程 第17课:自动化运维工具

Linux基础教程 第16课:集群和高可用性

Linux基础教程 第15课:Linux内核和驱动管理

热门标签:
Linux基础教程 第九课:磁盘管理和文件系统.docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网