linux-mount-swap相关知识
Linux 系统管理完整学习笔记
目录
- Linux 目录与文件管理
- mount 挂载概念
- Swap 交换分区
- 创建 Swap 文件
- Swap 分区与 Swap 文件的对比
- 硬链接数详解
- 特殊目录 . 和 ..
- 关键总结
一、Linux 目录与文件管理
1. ll 命令输出解读
root@VM-0-15-debian:/data# ll
total 8
drwxr-xr-x 2 root root 4096 Aug 7 2023 ./
drwxr-xr-x 19 root root 4096 Jul 17 14:00 ../输出字段说明:
| 字段 | 说明 |
|---|---|
| total 8 | 目录占用的磁盘块总数 |
| drwxr-xr-x | 目录权限:d表示目录,rwx为所有者权限,r-x为组用户权限,r-x为其他用户权限 |
| 2 | 硬链接数 |
| root root | 所有者和所属组 |
| 4096 | 目录大小(字节) |
| Aug 7 2023 | 目录最后修改时间 |
| ./ | 当前目录 |
| ../ | 上级目录 |
2. 目录时间戳说明
- ll 显示的时间是目录的最后修改时间
- 目录内有文件新增、删除或重命名时,该时间会更新
- 仅仅进入目录(cd)或读取文件,不会改变该时间
- ./ 显示 2023 年说明该目录自 2023 年后没有文件变动
- ../ 显示当前日期说明根目录在当天有过变更
目录显示较早年份表示该目录自那时起没有进行过任何文件增删操作。
3. 空目录的删除
rmdir /data或
rm -rf /data删除前检查事项:
| 检查项 | 命令 | |
|---|---|---|
| 是否有进程在使用 | lsof /data 或 fuser -m /data | |
| 是否被挂载 | mount \ | grep /data |
| 是否有软链接指向 | 手动检查 |
注意事项:
- 如果 /data 是系统默认的数据存放目录(如 MySQL、Docker 的数据目录),删除后这些服务会因找不到目录而出错
- 空目录删除安全,不会造成数据丢失
二、mount 挂载概念
1. mount 的含义
mount 是将存储设备或虚拟文件系统挂载到 Linux 目录树中某个位置的操作,使系统能够通过该目录访问设备中的数据。
Linux 与 Windows 的区别:
- Linux 没有 C:、D: 盘的概念
- 所有资源统一在根目录 / 下
- mount 将设备连接到根目录树上的特定节点
挂载前后对比:
- 挂载前:设备 /dev/sdb1 是独立的,系统无法访问
- 挂载后:访问 /data 等同于访问 /dev/sdb1 的内容
2. 任何磁盘都需要 mount 才能使用吗?
绝大多数情况下需要,但存在例外。
需要 mount 的场景:
- 新插入的 U 盘或移动硬盘
- 新增加的云硬盘或数据盘
- 挂载 ISO 镜像文件
- 挂载 NAS 或网络存储
不需要 mount 的例外:
- 根目录 /(系统启动时自动挂载)
- /boot/efi 引导分区(启动时自动挂载)
- 虚拟文件系统 /proc、/sys、/dev(内核虚拟,不存在于物理磁盘)
- swap 交换分区(不挂载到目录,直接挂载到内核内存管理)
- /etc/fstab 中配置的设备(开机自动完成挂载)
3. 查看挂载信息
mount
mount | grep /data如果 /data 不在挂载列表中,说明它只是一个普通目录,不是独立分区或外部存储。
4. 常见系统挂载点说明
| 挂载点 | 类型 | 作用 | 是否可操作 |
|---|---|---|---|
| /sys | sysfs | 内核和硬件设备信息(虚拟) | 绝对不能 |
| /proc | proc | 进程和系统状态信息(虚拟) | 绝对不能 |
| /dev | devtmpfs | 设备文件 | 绝对不能 |
| /run | tmpfs | 运行时数据(内存中) | 不能 |
| /dev/shm | tmpfs | 共享内存 | 谨慎操作 |
| /dev/pts | devpts | 伪终端(SSH连接用) | 绝对不能 |
| /sys/fs/cgroup | cgroup | 资源限制控制 | 绝对不能 |
| / | ext4/xfs | 系统盘根目录 | 绝对不能 |
| /boot/efi | vfat | UEFI启动分区 | 绝对不能 |
三、Swap 交换分区
1. Swap 的本质
Swap 是用磁盘空间模拟的慢速内存。当物理内存不足时,将暂时不用的数据移至磁盘,腾出物理内存给当前需要的进程。
Swap 不是扩展内存:
- 错误理解:内存 2GB + Swap 2GB = 4GB 内存
- 正确理解:内存 2GB + Swap 2GB = 真正能运行的程序仍限于 2GB,Swap 是减速缓存区
程序必须在物理内存中运行,无法直接在 Swap 中执行。
2. Swap 的工作原理
物理内存充足时:
- 直接分配给进程
物理内存不足时:
- 内核 kswapd 进程触发回收
- 释放缓存(buff/cache)
- 将不活跃进程的内存页压缩
- 将不活跃进程的内存页写入 Swap 分区
- 物理内存腾出空间分配给当前进程
页面交换机制:
- 活跃页:常被访问,留在物理内存
- 不活跃页:很少访问,可被换出
- 交换页:已换出到磁盘,再次访问时触发缺页中断,从 Swap 读回
换出:内存页写入 Swap 分区
换入:从 Swap 分区读回物理内存
3. Swap 与物理内存的区别
| 对比维度 | 物理内存(RAM) | Swap 分区 |
|---|---|---|
| 物理介质 | 内存芯片(DRAM) | 硬盘(SSD/HDD) |
| 速度 | 极快(纳秒级) | 慢(毫秒级,比内存慢1000-10000倍) |
| 容量 | 有限 | 可很大 |
| 掉电保存 | 数据丢失 | 数据保留(但重启后无意义) |
| 直接访问 | CPU 可直接读写 | 必须先换入内存 |
| 成本 | 昂贵 | 便宜 |
| 作用 | 真正运行程序 | 内存不足时的后备仓库 |
| 管理单位 | 页(通常4KB) | 页(通常4KB) |
4. 系统如何识别 Swap 分区
主动激活方式:
mkswap /dev/sdb1 # 格式化为 swap 格式,写入 swap 签名
swapon /dev/sdb1 # 激活使用,挂载到内核 swap 子系统开机自动激活,写入 /etc/fstab:
/dev/sdb1 none swap sw 0 0内核识别层次:
- 硬件层:通过 PCI/SATA/USB 总线识别物理设备
- 分区表:通过 GPT/MBR 分区表识别分区
- 分区类型:标记为 0x82(Linux Swap)或特定 GUID
- 格式化签名:mkswap 在分区开头写入的版本号和 UUID
5. 查看 Swap 使用情况
free -h # 查看内存和 swap 总量及使用量
swapon --show # 查看激活的 swap 设备
cat /proc/swaps # 同上
vmstat 1 # 实时查看 si(换入)和 so(换出)如果 si/so 持续大于 0,说明物理内存不足。
四、创建 Swap 文件
1. fallocate 命令
fallocate -l 2G /swapfile含义:在磁盘上创建一个 2GB 大小的空文件,文件名为 /swapfile。
各组成部分:
- fallocate:预分配文件空间的 Linux 命令
- -l 2G:指定文件大小为 2GB
- /swapfile:在根目录下创建该文件
特点:
- 速度极快(毫秒级完成)
- 不实际写入数据,只修改文件系统元数据
- 分配连续磁盘空间
- 不是稀疏文件
2. 创建 Swap 文件的三种方式对比
| 命令 | 速度 | 实际写入 | 用途 |
|---|---|---|---|
| fallocate -l 2G /swapfile | 极快 | 不写入 | 推荐用于创建 Swap 文件 |
| dd if=/dev/zero of=/swapfile bs=1M count=2048 | 慢 | 写入2GB零字节 | 传统方式,产生实际磁盘IO |
| truncate -s 2G /swapfile | 极快 | 不写入 | 创建稀疏文件,不能用于Swap |
3. 完整创建 Swap 文件的步骤
# 1. 创建 2GB 的空文件
fallocate -l 2G /swapfile
# 2. 设置权限(仅允许 root 读写)
chmod 600 /swapfile
# 3. 格式化为 swap 格式
mkswap /swapfile
# 4. 激活 swap
swapon /swapfile
# 5. 验证
free -h
swapon --show4. 注意事项
- fallocate 需要文件系统支持(ext4/xfs/btrfs 支持,旧版 ext3 不支持)
- 必须保证根目录所在分区有足够的空闲空间
- Swap 文件权限必须为 600,否则 swapon 会报错
如需开机自动启用,写入 /etc/fstab:
/swapfile none swap sw 0 0
五、Swap 分区与 Swap 文件的对比
1. 两种方式的区别
| 对比维度 | Swap 分区 | Swap 文件 |
|---|---|---|
| 操作时机 | 系统安装时 | 系统运行中 |
| 实现方式 | 单独划分分区 | 在已有分区上创建文件 |
| 灵活性 | 固定,调整需重分区 | 随时调整大小 |
| 性能 | 略快 | 略慢(差异微乎其微) |
| 管理复杂度 | 较复杂 | 极简单 |
| 云服务器适配 | 部分不支持自定义分区 | 通用 |
2. 物理原理
Swap 分区方式:
- 内核直接读写分区块设备
- 不经过文件系统层
- 少一层开销
Swap 文件方式:
- 内核通过文件系统访问文件
- 再映射到磁盘物理块
- 经过文件系统层寻址
3. 性能差异
| 场景 | Swap 分区 | Swap 文件 | 差异 |
|---|---|---|---|
| 顺序读写 | 100 MB/s | 约98 MB/s | 约2% |
| 随机读写 | 80 MB/s | 约78 MB/s | 约2-3% |
| CPU 开销 | 低 | 略高 | 差异极小 |
在 SSD 云硬盘上,差异可忽略不计,瓶颈始终是磁盘 IO 速度。
4. 云服务器推荐使用 Swap 文件的原因
- 系统盘通常只有一个分区,无需额外分区
- 随时可删除重建,大小任意调整
- 重置系统后重做即可,不依赖分区布局
- Swap 文件放在系统盘,不依赖其他数据盘
六、Swap 文件的后期调整
# 1. 关闭现有 swap
swapoff /swapfile
# 2. 删除旧文件
rm /swapfile
# 3. 创建更大的文件(如 4G)
fallocate -l 4G /swapfile
# 4. 重新格式化并激活
mkswap /swapfile
swapon /swapfile
# 5. 验证
free -hSwap 分区调整大小则需要:删除分区、重新创建分区(有数据丢失风险)、重新格式化、重新挂载,流程更复杂且存在风险。
七、硬链接数详解
1. 硬链接数的含义
硬链接数(Hard Link Count)是指指向该文件或目录的目录项(directory entry)数量。简单理解:有多少个"名字"指向了同一个文件数据。
2. 文件的硬链接
基本原理:
- 文件名是目录中的一个条目,指向文件的 inode(数据索引节点)
- inode 存储文件的元数据(大小、权限、时间戳、数据块位置等)
- 每个 inode 有一个计数器,记录有多少个文件名指向它
- 目录的硬链接数 = 子目录个数 + 2
目录1:/home/user/file1 ──┐
├──→ inode (数据块)
目录2:/data/backup/file2 ──┘创建硬链接:
echo "hello" > file1
ln file1 file2 # 创建硬链接
ln file1 file3 # 创建硬链接
ls -l file1 file2 file3
-rw-r--r-- 3 root root 6 Jul 17 16:00 file1
-rw-r--r-- 3 root root 6 Jul 17 16:00 file2
-rw-r--r-- 3 root root 6 Jul 17 16:00 file3硬链接的特点:
| 特点 | 说明 |
|---|---|
| 共享数据 | 所有硬链接指向同一个 inode,共享同一份数据 |
| 删除安全 | 删除一个文件名,数据不消失(硬链接数减1),直到计数为0才真正释放 |
| 无法跨文件系统 | 硬链接不能跨设备(inode 在不同文件系统中不通用) |
| 无法链接目录 | 普通用户不能对目录创建硬链接(避免循环引用) |
| 修改同步 | 修改任何一个文件,其他硬链接的内容同步变化 |
3. 目录的硬链接数
对于目录,硬链接数的计算公式:
硬链接数 = 2 + 子目录数量解释:
- 每个目录都有 .(当前目录)和 ..(上级目录)两个特殊的目录项
- . 指向自己,.. 指向父目录
- 每个子目录中的 .. 都会指向父目录
示例分析:
空目录 /data 的硬链接数 = 2:
- 父目录 / 中的条目 "data" 指向 /data
- /data 内部的 "." 指向 /data
- 没有子目录,所以没有额外的 ".."
- 总计 = 2
根目录 / 的硬链接数 = 19:
- / 自身目录条目 指向 /
- / 内部的 "." 指向 /
- 17 个子目录中的每个 ".." 都指向 /
- 总计 = 1 + 1 + 17 = 19
目录硬链接数变化示例:
# 创建空目录
mkdir test
ls -ld test/
drwxr-xr-x 2 root root ... test/
# 硬链接数 = 2
# 添加一个子目录
mkdir test/subdir
ls -ld test/
drwxr-xr-x 3 root root ... test/
# 硬链接数 = 3(自身 + . + subdir的..)
# 再添加一个子目录
mkdir test/subdir2
ls -ld test/
drwxr-xr-x 4 root root ... test/
# 硬链接数 = 4(自身 + . + 2个子目录的..)4. 常见硬链接数值解读
| 数值 | 含义 |
|---|---|
| 1 | 文件:只有一个文件名指向该数据;目录:不可能出现(目录最少为2) |
| 2 | 文件:有2个名字指向同一份数据;目录:空目录(只有自身和.) |
| 3 | 目录:有1个子目录 |
| 4+ | 目录:有多个子目录 |
八、特殊目录 . 和 ..
1. 基本概念
. 和 .. 是 Linux 文件系统中两个特殊的目录项,存在于每一个目录中。
| 特殊目录 | 含义 | 指向 |
|---|---|---|
| . | 当前目录(Current Directory) | 指向该目录自身 |
| .. | 上级目录(Parent Directory) | 指向该目录的父目录 |
示例:
/data 目录结构:
/
└── data/
└── (空)
进入 /data 后:
./ → /data
../ → / (根目录)2. 验证 . 和 .. 是目录
用 cd 进入:
cd . # 仍在 /data
cd .. # 回到 /(根目录)用 stat 查看:
stat .
stat ..用 ls -ld 查看:
ls -ld . .. /data /3. . 和 .. 的硬链接作用
这两个特殊目录是硬链接计数的重要组成部分:
- . 指向自身 → 产生 1 个硬链接
- 每个子目录的 .. 指向父目录 → 每个子目录增加 1 个硬链接
- 加上父目录中该目录本身的条目 → 基础 1 个硬链接
4. 常见用途
| 用途 | 命令示例 |
|---|---|
| 表示当前路径 | ./script.sh 执行当前目录下的脚本 |
| 回到上级目录 | cd .. |
| 复制到当前目录 | cp /etc/hosts . |
| 列出上级目录 | ls -la .. |
| 相对路径引用 | ../other_dir/file.txt |
5. 注意事项
. 和 .. 不是真实存在的文件或目录,而是文件系统中每个目录的"固有属性",由内核在创建目录时自动生成。
不能删除:
- rm -rf . 会报错
- rm -rf .. 非常危险
软链接的 .. 与硬链接的 .. 不同:
ln -s /data /data_link
cd /data_link/..软链接跳转时,.. 指向的是链接所在目录的父目录,而不是链接目标目录的父目录。
九、关键总结
- mount 是将设备连接到目录树的操作,物理磁盘分区必须挂载才能读写数据
- Swap 是磁盘模拟的慢速内存,程序必须在物理内存中运行,Swap 只是后备仓库
- Swap 分区在安装系统时指定,Swap 文件在系统运行中创建,两者功能等价
- fallocate 创建 Swap 文件是最推荐的方式,速度快且满足连续空间要求
- 云服务器环境推荐使用 Swap 文件,灵活简单,无需调整分区表
- 大量使用 Swap 会导致系统性能严重下降,生产环境应保证物理内存充足
- 硬链接数是指向同一 inode 的目录项数量,目录的硬链接数 = 2 + 子目录数量
- . 表示当前目录,.. 表示上级目录,它们是内核自动维护的特殊目录项
- 删除文件时硬链接数减1,当计数为0时数据才真正释放
- 硬链接不能跨文件系统,不能链接目录(普通用户);软链接则相反,更灵活但删除原文件后会失效