Linux 磁盘文件系统
Linux 使用各种文件系统来允许我们从计算机系统的硬件(例如磁盘)存储和检索数据。文件系统定义了如何在这些存储设备上组织、存储和检索数据。流行的 Linux 文件系统示例包括 EXT4、FAT32、NTFS 和 Btrfs。
每个文件系统都有自己的优点、缺点和用例。例如,EXT4 由于其稳健性和与 Linux 的兼容性而通常用于 Linux 系统卷,而 FAT32 可用于 USB 驱动器等可移动媒体,因为它与几乎所有作系统兼容。
以下是如何在 Linux 中使用 “df” 命令显示已挂载设备的文件系统类型的示例:
df -T
输出显示磁盘的名称、其文件系统类型以及其他其他信息,例如总空间、已用空间和磁盘上的可用空间。
💾 Linux文件系统就像图书馆的管理方式
核心概念:
-
磁盘 = 图书馆大楼
-
文件系统 = 图书分类和管理规则
-
文件 = 一本本藏书
📚 常见图书馆类型(文件系统)对比
文件系统 | 适用场景 | 特点 | 类比 |
---|---|---|---|
EXT4 | Linux系统盘 | 稳定可靠,支持大文件 | 国家图书馆(严谨系统) |
FAT32 | U盘/跨系统传输 | 兼容性强,但单文件≤4GB | 社区阅览室(简单通用) |
NTFS | Windows兼容 | 支持权限和大文件,适合双系统 | 双语图书馆(中英兼容) |
Btrfs | 高级用户/服务器 | 支持快照、压缩等高级功能 | 智能数字图书馆 |
🔍 查看图书馆信息(磁盘文件系统)
1️⃣ 查看所有"图书馆"概况
df -T # 显示各磁盘的文件系统类型
输出示例:
文件系统 类型 容量 已用 可用 使用% 挂载点
/dev/sda1 ext4 50G 30G 18G 63% /
/dev/sdb1 ntfs 1T 500G 500G 50% /mnt/data
2️⃣ 详细书架列表
lsblk -f # 显示块设备及其文件系统
🛠️ 日常管理操作
1️⃣ 挂载新图书馆(连接U盘)
sudo mount /dev/sdc1 /mnt/usb # 把sdc1分区挂载到/mnt/usb
2️⃣ 查看当前开放图书馆
mount | grep "^/dev" # 显示所有已挂载的磁盘
3️⃣ 扩建图书馆(格式化磁盘)
sudo mkfs.ext4 /dev/sdd1 # 将sdd1分区格式化为EXT4
🌰 实战场景:处理U盘文件
-
插入U盘后查看信息:
sudo fdisk -l # 确认U盘设备路径(如/dev/sdb1)
df -T /dev/sdb1
-
若需要转换为Linux专用格式:
sudo umount /dev/sdb1 # 先卸载
sudo mkfs.ext4 /dev/sdb1 # 格式化为EXT4(⚠️会清空数据!)
-
跨系统使用建议:
sudo mkfs.exfat /dev/sdb1 # 格式化为exFAT(适合大文件且Win/Mac/Linux通用)
⚠️ 重要注意事项
-
操作前备份:格式化就像重建图书馆,会清空所有藏书!
-
权限管理:EXT4/NTFS支持详细权限设置,FAT32无权限控制
-
系统目录:不要随意卸载
/
/home
等系统必备"图书馆" -
SSD优化:对固态硬盘建议使用
fstrim
定期清理:
sudo fstrim -v / # 对根目录执行TRIM
💡 高级技巧
-
Btrfs 快照功能(时光机功能):
sudo btrfs subvolume snapshot / /snapshots/2023-10 # 创建系统快照
-
EXT4 日志功能:突然断电时能像图书馆的借阅记录本,快速恢复数据完整性
最终效果:像资深图书管理员一样,轻松管理各种存储设备的数据仓库! 📚🔧
索引节点
在 Linux 文件系统中,inode(索引节点)是表示文件系统对象(如文件或目录)的核心概念。更具体地说,inode 是一种数据结构,用于存储有关文件的关键信息,但其名称和实际数据除外。此信息包括文件大小、所有者、访问权限、访问时间等。
Linux 文件系统中的每个文件或目录都有一个唯一的 inode,每个 inode 都由其自己的文件系统中的 inode 编号标识。此 inode 编号提供了一种跟踪每个文件的方法,充当 Linux作系统的唯一标识符。
每当在 Linux 中创建文件时,系统都会自动为其分配一个存储其元数据的 inode。inode 的结构和存储由文件系统处理,这意味着 inode 中元数据的种类和数量可能因文件系统而异。
尽管在日常使用中不会直接与 inode 交互,但在处理高级文件作(例如创建链接或恢复已删除的文件)时,了解 inode 可能非常有帮助。
# Retrieve the inode of a file
ls -i filename
📚 Inode 就像书的目录页
核心概念:
-
文件名 = 书籍标题(方便人类记忆)
-
Inode = 书籍版权页(记录书籍的真实信息)
-
数据块 = 书籍的正文内容
🔍 Inode 信息清单(元数据)
信息项 | 说明 | 类比 |
---|---|---|
Inode编号 | 文件的唯一身份证号 | ISBN书号 |
文件大小 | 实际数据占用量 | 书籍页数 |
权限信息 | 谁可以读/写/执行 | 书籍借阅权限 |
时间戳 | 创建/修改/访问时间 | 出版/修订日期 |
数据块指针 | 存储实际内容的磁盘位置 | 书籍存放的货架号 |
🛠️ 日常操作指南
1️⃣ 查看文件的"身份证"(Inode编号)
ls -i 文件名 # 查看单个文件的Inode
stat 文件名 # 查看详细Inode信息
示例输出:
文件:example.txt
Inode:123456 权限:(0644/-rw-r--r--)
所有者:user 所属组:users
大小:4096 块:8 IO块:4096 普通文件
最近访问:2023-10-01 09:00:00
最近更改:2023-09-30 15:30:00
2️⃣ 通过Inode找回文件
当文件名被删除但Inode仍存在时:
find / -inum 123456 # 在全盘搜索指定Inode的文件
3️⃣ 查看磁盘的Inode容量
df -i # 显示各分区的Inode使用情况(防小文件撑爆磁盘)
🌰 实战场景分析
场景: 网站服务器突然报错 "No space left on device",但 df -h
显示磁盘还有空间
-
检查Inode使用:
df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda1 1.2M 1.2M 0 100% /
👉 诊断结论:Inode耗尽(常见于大量小文件场景)
-
查找占用大户:
# 统计目录下的文件/目录数量(每个文件占用1个Inode)
find /var/log -type f | wc -l
⚠️ 重要特性须知
-
硬链接的秘密:
-
硬链接共享相同Inode(像同一本书的多个别名)
-
ln 源文件 硬链接文件
创建后,ls -i 显示相同Inode
-
-
删除文件的真相:
-
rm
只是删除了文件名到Inode的链接 -
当所有硬链接被删除且无进程占用时,Inode才会被释放
-
-
跨分区限制:
-
硬链接不能跨磁盘分区(不同图书馆的书架号无法通用)
-
软链接(符号链接)可以跨分区,但有独立的Inode
-
💡 Inode 冷知识
-
特殊Inode:
/
根目录的Inode通常是2(EXT4文件系统)
通过ls -i /
查看验证 -
Inode分配策略:
格式化磁盘时可通过-i
指定字节/Inode比例(如针对大量小文件优化)mkfs.ext4 -i 1024 /dev/sdb1 # 每1KB分配一个Inode
最终效果:理解Inode后,就像获得了透视眼,能看透文件系统的底层运作机制! 🔍👁️
文件系统
Linux作系统通过磁盘下文件系统的概念提供了多种处理数据存储的方法。从本质上讲,文件系统是在存储磁盘上存储和组织文件的方式。它是系统的关键组成部分,因为它确保了数据的完整性、可靠性和对数据的高效访问。
安装在 Linux 系统中的磁盘可以分为多个分区,每个分区都有自己的文件系统。Linux 支持各种类型的文件系统,例如 EXT4、XFS、BTRFS 等。它们中的每一个在性能、数据完整性和恢复选项方面都有自己的优势。
这些文件系统的配置依赖于定义的层次结构。所有文件和目录都从根目录开始,由 '/' 表示。
了解文件系统的概念和管理是成功管理 Linux 系统的关键,因为它涉及日常任务,例如挂载/卸载驱动器、检查磁盘空间、管理文件权限和修复损坏的文件系统。
在 Linux 中显示文件系统的代码片段:
df -T
此命令将显示文件系统的类型以及磁盘使用状态。
🗄️ Linux文件系统就像智能图书馆管理系统
核心功能:
-
数据分类存储:像图书馆分楼层存放不同书籍
-
快速定位检索:通过目录结构快速找到文件
-
安全保障:权限控制防止未授权访问
📚 图书馆架构解析(文件系统组成)
1️⃣ 书架分区(磁盘划分)
sudo fdisk -l # 查看磁盘分区情况
-
EXT4区:常规图书区(稳定可靠)
-
Btrfs区:数字阅读区(支持快照恢复)
-
NTFS区:外文图书区(兼容Windows系统)
2️⃣ 图书分类法(目录结构)
/
├── bin # 基础工具书(所有用户可读)
├── home # 个人书房(用户专属空间)
├── etc # 管理手册(系统配置文件)
├── var # 动态资料(日志/数据库)
└── mnt # 临时展区(U盘等外接设备)
3️⃣ 借阅规则(权限管理)
/
├── bin # 基础工具书(所有用户可读)
├── home # 个人书房(用户专属空间)
├── etc # 管理手册(系统配置文件)
├── var # 动态资料(日志/数据库)
└── mnt # 临时展区(U盘等外接设备)
🛠️ 日常维护操作
1️⃣ 查看图书馆容量
df -Th # 显示各分区的文件系统类型及使用情况
输出示例:
文件系统 类型 容量 已用 可用 使用% 挂载点
/dev/sda1 ext4 50G 30G 18G 63% /
/dev/sdb1 xfs 1T 500G 500G 50% /data
2️⃣ 新增图书区(挂载磁盘)
sudo mount /dev/sdc1 /mnt/新书区 # 连接新书架
3️⃣ 图书搬迁(扩容操作)
sudo resize2fs /dev/sda1 # EXT4在线扩容
sudo xfs_growfs /data # XFS文件系统扩容
🌰 实战场景:应对突发情况
场景1:图书馆漏水(文件系统损坏)
sudo fsck /dev/sda1 # 启动图书修复程序(需先卸载分区)
场景2:读者投诉找不到书(磁盘空间不足)
du -sh /* | sort -hr # 找出占用最大的目录
# 发现/var/log占用10G
journalctl --vacuum-size=100M # 清理日志
⚠️ 重要注意事项
风险点 | 应对措施 |
---|---|
误删文件 | 使用Btrfs/zfs的快照功能 |
权限混乱 | 定期审计 find / -nouser -o -nogroup |
硬盘老化 | 监控SMART状态 smartctl -a /dev/sda |
💡 高级功能推荐
-
Btrfs时空穿梭:
sudo btrfs subvolume snapshot / /snapshots/$(date +%Y%m%d) # 创建系统快照
-
EXT4日志恢复:突然断电后自动检查日志恢复数据完整性
-
XFS高性能存储:适合大型数据库,支持并行IO操作
📋 文件系统选择指南
使用场景 | 推荐文件系统 | 优势 |
---|---|---|
个人电脑 | EXT4 | 稳定兼容性好 |
服务器存储 | XFS | 处理大文件性能卓越 |
数据备份 | Btrfs | 支持压缩和快照 |
跨平台U盘 | exFAT | Win/Mac/Linux通用 |
最终效果:像专业图书馆管理员一样,轻松管理海量数据,既保证安全又提升效率! 📚🔧
挂载
在 Linux 环境中,与磁盘管理相关的一个非常重要的概念是文件系统的 “挂载”。从根本上说,在 Linux 中挂载是指允许作系统访问存储在底层存储设备(如硬盘驱动器或 SSD)上的数据的过程。此过程将文件系统(在某些存储介质上可用)附加到 Linux 目录树中的特定目录(也称为挂载点)。
这种方法的美妙之处在于 Linux 以统一和无缝的方式处理所有文件,无论它们是驻留在本地磁盘、网络位置还是任何其他类型的存储设备上。
Linux 中的命令用于挂载文件系统。当特定文件系统“挂载”到特定目录时,系统可以开始从设备读取数据并根据文件系统的规则对其进行解释。mount
值得注意的是,Linux 有一个特殊的目录 ,它通常用作手动挂载和卸载作的临时挂载点。/mnt
mount /dev/sdb1 /mnt
上面的命令会将文件系统(假设它是有效的)挂载到该目录下第二个硬盘驱动器的第二个分区上。挂载分区后,您可以使用该目录访问文件。/mnt
/mnt
了解和管理挂载对于有效的 Linux 磁盘和文件系统管理至关重要。
🖇️ Linux挂载就像给U盘插上电脑
核心概念:
-
存储设备 = U盘/移动硬盘
-
挂载点 = USB接口(接入系统的入口)
-
挂载操作 = 插入U盘的动作
🔌 挂载三步曲
1️⃣ 寻找U盘(识别设备)
sudo fdisk -l # 查看所有存储设备
# 输出示例:发现新U盘是/dev/sdb1
2️⃣ 创建接口(准备挂载点)
sudo mkdir /mnt/myusb # 新建"USB接口"
3️⃣ 插入设备(执行挂载)
sudo mount /dev/sdb1 /mnt/myusb # 把U盘挂载到指定接口
🗂️ 访问数据
cd /mnt/myusb # 进入U盘目录
ls # 查看文件
cp photo.jpg ~/Pictures/ # 复制照片到本地
⚡ 快速操作技巧
🔍 查看所有已插入的"U盘"
mount | grep "/dev/sd" # 显示所有物理设备挂载点
📌 卸载设备(安全弹出)
sudo umount /mnt/myusb # 卸载前确保没有文件在占用
# 或
sudo eject /dev/sdb1 # 针对光盘/U盘的特殊弹出方式
🔄 开机自动挂载(设置固定接口)
编辑 /etc/fstab
文件添加:
/dev/sdb1 /mnt/myusb ntfs defaults 0 0
然后执行:
sudo mount -a # 立即生效
🌰 实战场景
sudo mount -o loop ubuntu.iso /mnt/iso
3️⃣ -o loop
-o
(options):指定挂载选项,这里的loop
选项表示:loop
(loop device):使用环回设备(loopback device)将ubuntu.iso
当作一个虚拟磁盘 挂载。- 这样就可以像访问普通磁盘一样访问这个 ISO 文件。
💡 为什么要用 -o loop
? ISO 文件是一个光盘镜像,它本质上是一个文件,而不是一个物理设备。Linux 通过 loop
设备模拟一个“虚拟光盘”来访问 ISO 文件的内容。
-o loop
:表示用**“环回设备”**(loopback device)来模拟一个虚拟光盘,而不是挂载一个物理设备。
💡 简单比喻:
就像你下载了一部电影 movie.iso
,但你不能直接播放它。用 mount -o loop
挂载后,就像你“插入”了一张 DVD,现在可以打开 /mnt/iso
来浏览电影里的文件了!
场景1:挂载Windows共享文件夹
sudo mkdir /mnt/win_share
sudo mount -t cifs //192.168.1.100/share /mnt/win_share -o username=user
这条命令的作用是把 Windows 共享的文件夹“连接”到 Linux 上的 /mnt/win_share
,相当于 Windows 里的“映射网络驱动器”。
逐部分解释:
sudo
→ 需要管理员权限。mount
→ 挂载(连接)一个存储设备或共享资源。-t cifs
→ 说明使用 CIFS(Common Internet File System)协议,也叫 SMB(Windows 共享协议)。//192.168.1.100/share
→ Windows 共享文件夹的网络路径:192.168.1.100
→ 共享文件夹所在的 Windows 电脑的IP 地址。/share
→ 这台 Windows 电脑上共享的文件夹名称。
/mnt/win_share
→ 挂载的位置(前面创建的文件夹),挂载后你可以在这里访问 Windows 共享的文件。-o username=user
→ 选项(options),这里是指定 Windows 共享的用户名(你可能需要输入密码)。
💡 直白比喻
- 就像你用 Windows 访问局域网里的共享文件夹,但现在你在 Linux 里用
mount
让它变成 Linux 里的一个本地文件夹。 - Windows 的共享文件夹 就像是一个“U 盘”,
mount
命令 把这个“U 盘”插入到 Linux 里的/mnt/win_share
文件夹里,这样你可以直接访问它。
场景2:挂载ISO镜像文件
sudo mount -o loop ubuntu.iso /mnt/iso
⚠️ 注意事项
常见问题 | 解决方案 |
---|---|
设备忙无法卸载 | lsof /mnt/myusb 查占用进程 |
挂载点非空 | 原有文件会被隐藏直到卸载 |
文件系统损坏 | 先修复 fsck /dev/sdb1 |
💡 高级用法
-
绑定挂载(镜像目录):
sudo mount --bind /var/www /mnt/mirror_web # 同步显示网站目录
sudo
→ 需要管理员权限,因为mount
需要更高权限。mount
→ 用于挂载(连接)文件系统或目录。--bind
→ “绑定挂载”,让一个目录映射到另一个位置。/var/www
→ 原始目录(网站文件通常存放在这里)。/mnt/mirror_web
→ 目标目录(这个文件夹会显示/var/www
里的内容)。
💡 直白比喻
想象你家有一个书架 /var/www
,里面放着很多书。
你想在另一个房间 /mnt/mirror_web
也能看到这些书,但不想复制它们,于是你用 mount --bind
创建了一个“魔法书架”,它显示的内容和 /var/www
完全同步,但实际上这些书还在原来的书架上。📚✨
📌 什么时候用?
- 你想在多个位置访问同一个目录,但又不想复制数据。
- 你需要给某些程序或用户提供一个只读副本(可以加
-o ro
选项)。 - 你在做chroot 隔离环境,需要让某些目录保持可访问。
🛠 取消挂载
如果不需要这个“镜像映射”了,可以用:
sudo umount /mnt/mirror_web
这样 /mnt/mirror_web
目录就不再显示 /var/www
里的内容了,但 /var/www
本身不会受到影响。🚀
-
临时内存盘:
sudo mount -t tmpfs -o size=1G tmpfs /mnt/ramdisk # 创建1G内存虚拟盘
sudo
→ 需要管理员权限,因为mount
操作涉及系统级挂载。mount
→ 用于挂载(连接)文件系统。-t tmpfs
→ 说明要挂载tmpfs(临时文件系统,存放在内存中)。-o size=1G
→ 设定 tmpfs 的大小为 1GB,防止它占用太多内存。tmpfs
→ 指定使用 tmpfs 作为文件系统(这个是虚拟的,不需要提供物理设备)。/mnt/ramdisk
→ 目标挂载点,也就是我们用来存放临时文件的目录。
💡 直白比喻
- 你的电脑有一块“超级快”的存储空间(RAM),但它的内容在关机后会消失。
- 你用
mount -t tmpfs
创建了一个“虚拟U盘”,这个 U 盘实际上是从 RAM 里划分出来的,访问速度极快,但断电就没了。🚀💾
📌 什么时候用?
- 存放临时文件(比 SSD 甚至 NVMe 还快)。
- 编译大项目时加速构建(比如放
build
目录,加快编译速度)。 - 作为缓存目录(存放需要频繁读取但不重要的文件,比如
/tmp
)。
🛠 取消挂载(释放内存)
如果不需要了,可以用:
sudo umount /mnt/ramdisk
这样就会释放这 1GB 内存,目录 /mnt/ramdisk
仍然存在,但不再是 RAM Disk 了。🎯
最终效果:像玩拼插积木一样,自由组合各种存储设备到系统目录树! 🔌🗂️
添加磁盘
在 Linux 中,硬盘和便携式驱动器通过一系列目录和文件(通常称为 Linux 文件系统)进行管理和控制。在 Linux 中添加新磁盘时,您需要先准备它们,然后才能使用它们。
该过程包括在磁盘上创建分区,在分区上创建文件系统,然后将文件系统挂载到系统目录树中的目录。这在使用多个磁盘驱动器或大型数据存储单元时尤其重要,以便创建无缝的用户体验。
以下是管理磁盘的常用命令:
- 用于列出所有块设备(磁盘和分区)。
lsblk
- 用于在磁盘上创建新分区。
fdisk /dev/sdX
- 用于在分区上创建新的文件系统。
mkfs.ext4 /dev/sdX1
- 用于将文件系统挂载到目录。
mount /dev/sdX1 /mount/point
# example commands to add new disk
lsblk # list all disks and partitions
sudo fdisk /dev/sdb # let's suppose new disk is /dev/sdb
sudo mkfs.ext4 /dev/sdb1 # make filesystem(e.g., ext4) on partition 1
sudo mount /dev/sdb1 /mnt # mount new filesystem to /mnt directory
请记住将 and 替换为您的实际磁盘和分区标识符。挂载点也可以根据您的系统结构和首选项替换为任何其他目录。/dev/sdb
/dev/sdb1
/mnt
💽 给Linux系统添加新磁盘就像安装新储物柜
核心步骤:
-
安装储物柜 → 连接新硬盘
-
划分隔间 → 创建分区
-
贴标签整理 → 格式化文件系统
-
开柜门使用 → 挂载到目录
🛠️ 四步安装指南
1️⃣ 查看储物柜布局(识别新磁盘)
lsblk # 显示所有"储物柜"(磁盘)结构
# 输出示例:
# sdb 8:16 0 1T 0 disk ← 发现新储物柜(1TB新硬盘)
2️⃣ 划分储物隔间(创建分区)
sudo fdisk /dev/sdb # 开始规划新储物柜
# 按n创建新分区 → 选p主分区 → 设置大小 → 按w保存
3️⃣ 安装隔板标签(格式化)
sudo mkfs.ext4 /dev/sdb1 # 给第一个隔间贴上"EXT4"标签(格式化)
# 可选其他标签:xfs、ntfs、btrfs...
4️⃣ 连接储物柜到房间(挂载使用)
sudo mkdir /data # 在房间建个新门(创建挂载点)
sudo mount /dev/sdb1 /data # 把储物柜隔间连接到这扇门
🔄 设置自动连接(开机自动挂载)
编辑 /etc/fstab
添加:
/dev/sdb1 /data ext4 defaults 0 0
验证配置:
sudo mount -a # 测试配置是否正确
🌰 实战场景:扩容家庭照片库
-
插入新硬盘 → 连接SATA/USB线
-
创建专属分区 → 用fdisk划分500G空间
-
格式化为EXT4 →
mkfs.ext4 /dev/sdb1
-
挂载到/photo →
mount /dev/sdb1 /photo
-
设置自动挂载 → 编辑fstab文件
⚠️ 安全须知
风险点 | 防护措施 |
---|---|
数据丢失 | 操作前备份重要数据! |
错误分区 | 用lsblk 反复确认设备名称 |
权限问题 | 用chmod 设置目录访问权限 |
兼容性问题 | 跨系统使用选exFAT/NTFS格式 |
💡 高级技巧
-
LVM动态扩容:
pvcreate /dev/sdb1 # 创建物理卷
vgextend vg_data /dev/sdb1 # 加入卷组
lvextend -L +500G /dev/vg_data/lv_photos # 扩容逻辑卷
resize2fs /dev/vg_data/lv_photos # 调整文件系统
-
SSD优化:
sudo tune2fs -O fast_commit /dev/sdb1 # 启用快速提交(EXT4)
sudo mount -o discard /dev/sdb1 /data # 启用TRIM
🔍 常用检查命令
df -Th # 查看已连接的"储物柜"
blkid # 显示所有存储设备UUID
sudo hdparm -I /dev/sdb # 查看硬盘详细信息
最终效果:像在房间添加新储物柜一样,轻松扩展Linux系统的存储空间! 🗄️🔧
Disks Filesystems 下的 Linux Swap
当物理内存 (RAM) 量已满时,将使用 Linux 中的交换空间。如果系统需要更多内存资源,并且物理内存已满,则内存中的非活动页将移动到交换空间。交换空间是硬盘驱动器 (HDD) 中用于虚拟内存的一部分。
拥有交换空间可确保每当系统的物理内存不足时,它可以将一些数据移动到交换空间,从而释放 RAM 空间,但这会带来性能影响,因为基于磁盘的存储比 RAM 慢。
在磁盘和文件系统的上下文中,交换空间可以位于两个位置:
- 在它自己的专用分区中。
- 在现有文件系统中的常规文件中。
例如,要添加交换文件,我们可以使用 fallocate 命令创建特定大小的交换文件,并使用 mkswap 命令使其适合交换使用。
fallocate -l 1G /swapfile # creates a swap file
chmod 600 /swapfile # secures the swap file by preventing regular users from reading it
mkswap /swapfile # sets up the Linux swap area
swapon /swapfile # enables the file for swapping
请记住,决定将交换空间放置在何处、拥有多少交换空间以及如何利用交换空间都是优化系统性能的重要考虑因素。
💾 Linux交换空间就像应急备用仓库
核心概念:
-
物理内存(RAM) = 工厂的临时货架(存取极快但容量有限)
-
交换空间(Swap) = 后方备用仓库(空间大但搬运速度慢)
🔄 Swap 工作原理
当临时货架(RAM)堆满时,系统会把暂时不用的货物(内存数据)搬到后方仓库(Swap),腾出货架空间。虽然能缓解燃眉之急,但频繁搬运会导致效率下降(性能影响)。
🛠️ 创建Swap的两种方式
1️⃣ 专用仓库(Swap分区)
适合长期使用,性能更稳定
# 安装系统时预先划分独立分区(如8GB)
2️⃣ 临时储物箱(Swap文件)
灵活创建,适合临时扩容
# 创建1G大小的Swap文件
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile # 上锁防止他人查看
sudo mkswap /swapfile # 改装成专用仓库
sudo swapon /swapfile # 开放仓库使用
📊 查看仓库使用情况
free -h # 查看内存和Swap总量
swapon --show # 显示活动的Swap空间
🌰 实战场景:服务器内存不足
-
临时扩容:
# 创建4GB Swap文件
sudo fallocate -l 4G /swap_temp
sudo mkswap /swap_temp && sudo swapon /swap_temp
sudo
→ 需要管理员权限,因为 Swap 影响系统内存管理。fallocate -l 4G
→ 直接在磁盘上分配 4GB 空间(比dd
命令快)。/swap_temp
→ 这个是新创建的 Swap 文件的路径(就像一个大空白文件)。
📌 比喻:你在磁盘上划分出 4GB 空间,准备当作“虚拟内存”使用。
mkswap
→ 把/swap_temp
转换为 Swap 交换分区的格式,系统才能识别。
📌 比喻:就像是你买了一块新硬盘,必须格式化才能用。
swapon
→ 启用这个 Swap 文件,让 Linux 识别并开始使用它。
📌 比喻:你买的“备用内存条”终于装上了,系统可以用了!
💡 这有什么用?
- 当内存(RAM)不够时,系统会把不常用的数据放进 Swap,防止程序崩溃。
- 让没有足够物理内存的老电脑运行得更稳定。
- 用于测试,或者临时增加 Swap,而不需要重新分区。
-
永久生效:
编辑/etc/fstab
添加:
/swap_temp none swap sw 0 0
-
移除Swap(升级内存后):
sudo swapoff /swap_temp # 先停用 Swap
sudo rm /swap_temp # 删除 Swap 文件,释放磁盘空间
⚠️ 配置建议
物理内存 | 推荐Swap大小 | 适用场景 |
---|---|---|
≤ 2GB | 2倍内存 | 老旧设备 |
2-8GB | 等于内存大小 | 普通PC/服务器 |
>8GB | 0.5倍内存(至少4G) | 高性能服务器 |
💡 性能优化技巧
-
Swappiness调节:
控制系统使用Swap的积极程度(0-100,默认60)sudo sysctl vm.swappiness=10 # 更倾向使用物理内存
-
SSD优化:
使用SSD作为Swap时,启用discard
选项支持TRIM# /etc/fstab 中添加 /swapfile none swap defaults,discard 0 0
❗ 注意事项
-
频繁交换警告:若Swap使用率持续>50%,应考虑升级内存
-
文件位置:Swap文件建议放在高速存储(如SSD)
-
安全删除:移除Swap文件前务必先
swapoff
最终效果:像给系统配备了一个智能应急仓库,内存不足时自动调度,确保系统平稳运行! 🚚💨
Linux 逻辑卷管理器 (LVM)
Linux Logical Volume Manager (LVM) 是一个设备映射器框架,可为 Linux 内核提供逻辑卷管理。创建它是为了简化磁盘管理,允许使用抽象存储设备(称为逻辑卷),而不是直接使用物理存储设备。
LVM 非常灵活,其功能包括调整卷大小、跨多个物理磁盘镜像卷以及在磁盘之间移动卷而无需关闭电源。
LVM 在 3 个级别上工作:物理卷 (PV)、卷组 (VG) 和逻辑卷 (LV)。
- PV 是实际的磁盘或分区。
- VG 将 PV 合并到单个存储池中。
- LV 从 VG 中分出部分供系统使用。
要创建 LVM,您需要在 Linux 中按照以下步骤作:
pvcreate /dev/sdb1
vgcreate my-vg /dev/sdb1
lvcreate -L 10G my-vg -n my-lv
在上面的命令中,我们在 上创建一个物理卷,然后创建一个名为 的卷组。最后,我们从卷组中划出一个 10GB 的逻辑卷并将其命名为 。/dev/sdb1
my-vg
my-lv
这些功能共同为管理存储系统提供了极大的便利,特别是对于通常使用大量磁盘阵列的大型企业级系统。
Linux 逻辑卷管理器(LVM)
就像给你的硬盘装了一个“智能储物柜系统”——它能把多块硬盘或分区灵活组合、动态调整,像搭积木一样管理存储空间!以下是通俗解释和操作指南:
核心概念:3层结构
-
物理卷(PV) → 砖块
-
实际的硬盘或分区(如
/dev/sdb
或/dev/sdb1
)。 -
相当于“原材料”,需要先加工成砖块才能用。
-
-
卷组(VG) → 砖墙
-
把多个“砖块”(PV)堆成一堵墙,形成一个大存储池。
-
比如:把 2 块 1TB 硬盘合并成 2TB 的池子。
-
-
逻辑卷(LV) → 房间
-
在“砖墙”里隔出一个个房间(分区),供系统使用(挂载到目录)。
-
房间大小可随时调整,甚至跨越多块硬盘!
-
LVM 核心优势
-
动态扩容/缩容:LV(房间)大小随时调整,不用格式化硬盘!
-
跨硬盘合并:把多块硬盘(PV)当一块大硬盘(VG)用。
-
快照备份:给LV拍“照片”,备份数据时不中断服务。
实战操作:手把手创建LVM
假设你有一块新硬盘 /dev/sdb
,想用它创建一个逻辑卷:
1. 将硬盘做成“砖块”(PV)
pvcreate /dev/sdb # 把/dev/sdb初始化为物理卷(PV)
2. 堆砌“砖墙”(VG)
vgcreate my_vg /dev/sdb # 创建名为 my_vg 的卷组(VG)
3. 在墙上隔出“房间”(LV)
lvcreate -L 500G -n my_lv my_vg # 从my_vg分出500G,命名my_lv
4. 格式化并挂载使用
mkfs.ext4 /dev/my_vg/my_lv # 格式化为ext4文件系统
mkdir /data
mount /dev/my_vg/my_lv /data # 挂载到/data目录
LVM 日常管理场景
场景一:给“房间”扩容(LV扩容)
# 1. 先扩逻辑卷(+500G)
lvextend -L +500G /dev/my_vg/my_lv
# 2. 再扩文件系统(让系统识别新空间)
resize2fs /dev/my_vg/my_lv # ext4文件系统适用
# 或 xfs_growfs /data # XFS文件系统用这条
场景二:添加新硬盘到“砖墙”(VG扩容)
pvcreate /dev/sdc # 初始化新硬盘为PV
vgextend my_vg /dev/sdc # 将新PV加入my_vg卷组
# 现在可以给LV扩容了!
lvcreate -s -n snap_lv -L 10G /dev/my_vg/my_lv # 为my_lv创建10G快照
mount /dev/my_vg/snap_lv /mnt/snapshot # 挂载快照并备份
lvremove /dev/my_vg/snap_lv # 删除快照释放空间
lvcreate
→ 创建一个新的逻辑卷(Logical Volume,简称 LV)。-s
→ 这个选项表示 创建的是快照(snapshot),而不是普通的逻辑卷。-n snap_lv
→ 给快照取名snap_lv
,可以自定义名字。-L 10G
→ 分配 10GB 空间 来存储快照数据。/dev/my_vg/my_lv
→ 快照的目标,也就是要备份的逻辑卷my_lv
,它属于卷组my_vg
。
📌 通俗比喻
- 你的
/dev/my_vg/my_lv
逻辑卷 就像一本书📖。 - 你创建了一个 10GB 快照(snap_lv),相当于拍了一张书的快照📸。
- 只要快照存在,即使你修改或删除原书的内容,你仍然可以恢复到拍照时的状态。
- 但快照需要额外空间(10GB),如果原书改动太多,超出 10GB,快照就会失效!
💡 快照的作用
✅ 备份数据:创建快照后,你可以备份它,而不会影响正在运行的系统。
✅ 防止误操作:如果你误删了数据,可以从快照恢复。
✅ 测试新软件:你可以先创建快照,安装软件,如果出现问题,直接恢复快照。
场景三:创建快照(备份不中断服务)
lvcreate -s -n snap_lv -L 10G /dev/my_vg/my_lv # 为my_lv创建10G快照
mount /dev/my_vg/snap_lv /mnt/snapshot # 挂载快照并备份
lvremove /dev/my_vg/snap_lv # 删除快照释放空间
LVM vs 传统分区的优势
场景 | 传统分区 | LVM |
---|---|---|
硬盘空间不足时 | 必须停机、备份、重分区、恢复数据 | 动态扩容,无需停机 |
管理多块硬盘 | 每块硬盘独立分区,无法合并 | 多块硬盘合并成一个存储池,统一管理 |
调整分区大小 | 需格式化,数据丢失风险高 | 随时调整,数据安全 |
快照备份 | 不支持 | 支持快速创建快照,备份效率高 |
总结
-
物理卷(PV) → 砖块
-
卷组(VG) → 砖墙
-
逻辑卷(LV) → 房间
-
操作口诀:
-
想扩容 →
vgextend
加砖块 →lvextend
扩房间。 -
要备份 →
lvcreate -s
拍快照。 -
加硬盘 →
pvcreate
初始化 →vgextend
合并到卷组。
-
有了LVM,存储管理就像玩乐高一样灵活! 🧱