linux学习(十)(磁盘和文件系统(索引节点,文件系统,添加磁盘,交换,LVM公司,挂载))

news2025/3/10 9:27:42

Linux 磁盘文件系统

Linux 使用各种文件系统来允许我们从计算机系统的硬件(例如磁盘)存储和检索数据。文件系统定义了如何在这些存储设备上组织、存储和检索数据。流行的 Linux 文件系统示例包括 EXT4、FAT32、NTFS 和 Btrfs。

每个文件系统都有自己的优点、缺点和用例。例如,EXT4 由于其稳健性和与 Linux 的兼容性而通常用于 Linux 系统卷,而 FAT32 可用于 USB 驱动器等可移动媒体,因为它与几乎所有作系统兼容。

以下是如何在 Linux 中使用 “df” 命令显示已挂载设备的文件系统类型的示例:

df -T

输出显示磁盘的名称、其文件系统类型以及其他其他信息,例如总空间、已用空间和磁盘上的可用空间。

💾 Linux文件系统就像图书馆的管理方式

核心概念:

  • 磁盘 = 图书馆大楼

  • 文件系统 = 图书分类和管理规则

  • 文件 = 一本本藏书


📚 常见图书馆类型(文件系统)对比

文件系统适用场景特点类比
EXT4Linux系统盘稳定可靠,支持大文件国家图书馆(严谨系统)
FAT32U盘/跨系统传输兼容性强,但单文件≤4GB社区阅览室(简单通用)
NTFSWindows兼容支持权限和大文件,适合双系统双语图书馆(中英兼容)
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盘文件

  1. 插入U盘后查看信息

sudo fdisk -l  # 确认U盘设备路径(如/dev/sdb1)
df -T /dev/sdb1
 
  1. 若需要转换为Linux专用格式

sudo umount /dev/sdb1        # 先卸载
sudo mkfs.ext4 /dev/sdb1     # 格式化为EXT4(⚠️会清空数据!)
 
  1. 跨系统使用建议

sudo mkfs.exfat /dev/sdb1    # 格式化为exFAT(适合大文件且Win/Mac/Linux通用)

⚠️ 重要注意事项

  1. 操作前备份:格式化就像重建图书馆,会清空所有藏书!

  2. 权限管理:EXT4/NTFS支持详细权限设置,FAT32无权限控制

  3. 系统目录:不要随意卸载/ /home等系统必备"图书馆"

  4. 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 显示磁盘还有空间

  1. 检查Inode使用:

df -i

文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda1     1.2M    1.2M      0      100%   /
 

👉 诊断结论:Inode耗尽(常见于大量小文件场景)

  1. 查找占用大户:

# 统计目录下的文件/目录数量(每个文件占用1个Inode)
find /var/log -type f | wc -l  

⚠️ 重要特性须知

  1. 硬链接的秘密

    • 硬链接共享相同Inode(像同一本书的多个别名)

    • ln 源文件 硬链接文件 创建后,ls -i 显示相同Inode

  2. 删除文件的真相

    • rm 只是删除了文件名到Inode的链接

    • 当所有硬链接被删除且无进程占用时,Inode才会被释放

  3. 跨分区限制

    • 硬链接不能跨磁盘分区(不同图书馆的书架号无法通用)

    • 软链接(符号链接)可以跨分区,但有独立的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盘exFATWin/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. 安装储物柜 → 连接新硬盘

  2. 划分隔间 → 创建分区

  3. 贴标签整理 → 格式化文件系统

  4. 开柜门使用 → 挂载到目录


🛠️ 四步安装指南

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  # 测试配置是否正确
 

🌰 实战场景:扩容家庭照片库

  1. 插入新硬盘 → 连接SATA/USB线

  2. 创建专属分区 → 用fdisk划分500G空间

  3. 格式化为EXT4 → mkfs.ext4 /dev/sdb1

  4. 挂载到/photo → mount /dev/sdb1 /photo

  5. 设置自动挂载 → 编辑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 慢。

在磁盘和文件系统的上下文中,交换空间可以位于两个位置:

  1. 在它自己的专用分区中。
  2. 在现有文件系统中的常规文件中。

例如,要添加交换文件,我们可以使用 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空间
 

🌰 实战场景:服务器内存不足

  1. 临时扩容

# 创建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,而不需要重新分区
  1. 永久生效
    编辑 /etc/fstab 添加:

/swap_temp none swap sw 0 0
  1. 移除Swap(升级内存后):

sudo swapoff /swap_temp  # 先停用 Swap
sudo rm /swap_temp       # 删除 Swap 文件,释放磁盘空间
 

⚠️ 配置建议

物理内存推荐Swap大小适用场景
≤ 2GB2倍内存老旧设备
2-8GB等于内存大小普通PC/服务器
>8GB0.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

❗ 注意事项

  1. 频繁交换警告:若Swap使用率持续>50%,应考虑升级内存

  2. 文件位置:Swap文件建议放在高速存储(如SSD)

  3. 安全删除:移除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层结构

  1. 物理卷(PV) → 砖块

    • 实际的硬盘或分区(如 /dev/sdb 或 /dev/sdb1)。

    • 相当于“原材料”,需要先加工成砖块才能用。

  2. 卷组(VG) → 砖墙

    • 把多个“砖块”(PV)堆成一堵墙,形成一个大存储池。

    • 比如:把 2 块 1TB 硬盘合并成 2TB 的池子。

  3. 逻辑卷(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,存储管理就像玩乐高一样灵活! 🧱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【极光 Orbit•STC8A-8H】03. 小刀初试:点亮你的LED灯

【极光 Orbit•STC8H】03. 小刀初试:点亮你的 LED 灯 七律 点灯初探 单片方寸藏乾坤,LED明灭见真章。 端口配置定方向,寄存器值细推敲。 高低电平随心控,循环闪烁展锋芒。 嵌入式门初开启,从此代码手中扬。 摘要 …

OSPF报文分析

OSPF报文分析 组播地址 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用; 224.0.1.0~238.255.255.255为用户可用的组播地址(…

MySql性能(9)- mysql的order by的工作原理

全字段排序rowid排序全字段排序和rowid排序 3.1 联合索引优化 3.2 覆盖索引优化优先队列算法优化建议 5.1 修改系统参数 5.2 优化sql 1. 全字段排序 CREATE TABLE t ( id int(11) NOT NULL,city varchar(16) NOT NULL, name varchar(16) NOT NULL, age int(11) NOT NULL,addr v…

爬虫案例七Python协程爬取视频

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python协程爬取视频 前言 提示:这里可以添加本文要记录的大概内容: 爬虫案例七协程爬取视频 提示:以下是本篇文章正文…

智慧城市智慧社区项目建设方案

一、项目背景 在全球化进程加速的今天,城市化问题日益凸显,传统的城市管理模式已难以满足现代社会对高效、智能化管理的需求。智慧城市和智慧社区的概念应运而生,其核心目标是通过信息技术手段,提升城市资源的利用效率&#xff0…

RabbitMQ高级特性--消息确认机制

目录 一、消息确认 1.消息确认机制 2.手动确认方法 二、代码示例 1. AcknowledgeMode.NONE 1.1 配置文件 1.2 生产者 1.3 消费者 1.4 运行程序 2.AcknowledgeMode.AUTO 3.AcknowledgeMode.MANUAL 一、消息确认 1.消息确认机制 生产者发送消息之后,到达消…

Java EE 进阶:Spring IoCDI

IOC的简单介绍 什么是Spring?Spring是一个开源的框架,让我们的开发更加的简单,我们可以用一句更加具体的话来概括Spring,就是Spring是一个包含众多工具方法的IOC容器。 简单介绍一下IOC,我们之前说过通过ReqestContr…

Java数据结构第二十期:解构排序算法的艺术与科学(二)

专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、常见排序算法的实现 1.1. 直接选择排序 1.2. 堆排序 1.3. 冒泡排序 1.4. 快速排序 一、常见排序算法的实现 1.1. 直接选择排序 每⼀次从待排序的数据元素中选出最小的⼀个元素,存放在…

【算法day5】最长回文子串——马拉车算法

最长回文子串 给你一个字符串 s,找到 s 中最长的 回文 子串。 https://leetcode.cn/problems/longest-palindromic-substring/description/ 算法思路: class Solution { public:string longestPalindrome(string s) {int s_len s.size();string tmp …

《如何排查Linux系统平均负载过高》

【系统平均负载导读】何为系统平均负载?假设一台云服务主机,突然之间响应用户请求的时间变长了,那么这个时候应该如何去排查?带着这个问题,我们对“平均负载”展开深入的探讨和研究。 何为Linux系统的平均负载&#xf…

基于DeepSeek实现PDF嵌入SVG图片无损放大

1. PDF中效果图 2. 询问Deepseek进行代码书写,不断优化后结果 /*** SVG工具类,用于生成价格趋势的SVG图表*/ public class SvgUtils {// SVG画布尺寸private static final int WIDTH 800;private static final int HEIGHT 500;private static final i…

整型的不同类型和溢出

一、整数的不同类型 不同编程语言中的整数类型主要通过以下两个维度区分: 1. 存储大小 字节数:决定整数能表示的范围(如 1字节8位)。 常见类型: byte(1字节)、short(2字节&#x…

使用express创建服务器保存数据到mysql

创建数据库和表结构 CREATE DATABASE collect;USE collect;CREATE TABLE info (id int(11) NOT NULL AUTO_INCREMENT,create_date bigint(20) DEFAULT NULL COMMENT 时间,type varchar(20) DEFAULT NULL COMMENT 数据分类,text_value text COMMENT 内容,PRIMARY KEY (id) ) EN…

小程序 wxml 语法 —— 41列表渲染 - 进阶用法

这一节讲解列表渲染的两个进阶用法: 如果需要对默认的变量名和下标进行修改,可以使用 wx:for-item 和 wx:for-item: 使用 wx:for-item 可以指定数组当前元素的变量名使用 wx:for-index 可以指定数组当前下标的变量名 将 wx:for 用在 标签上&…

python语言总结(持续更新)

本文主要是总结各函数,简单的函数不会给予示例,如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示,用以提示用户)输入函数 注释 # 单行注释符&…

FPGA学习篇——Verilog学习5(reg,wire区分及模块例化)

1 何时用reg,何时用wire? 这个我找了一些网上的各种资料,大概说一下自己的理解,可能还不太到位... wire相当于一根线,是实时传输的那种,而reg是一个寄存器,是可以存储数据的,需要立…

Redis 数据持久化之AOF

AOF(Append Only File) 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换…

【芯片验证】verificationguide上的74道SystemVerilog面试题

诧异啊,像我这种没事在网上各处捡东西吃的人为什么之前一直没有用过verificationguide这个网站呢?总不能是大家都已经看过就留下我不知道吧。前几天在论坛上和朋友谈论验证面试题时才搜到这个网站的,感觉挺有意思: .: Verification Guide :.​verificationguide.com/https…

Java后端高频面经——计算机网络

TCP/IP四层模型?输入一个网址后发生了什么,以百度为例?(美团) (1)四层模型 应用层:支持 HTTP、SMTP 等最终用户进程传输层:处理主机到主机的通信(TCP、UDP&am…

面试题(二)--Object中的常见方法

Object Java的Object是所有Java类的父类,所有的Java类直接或者间接的继承了Object类,Object类位于java.lang包中(编译时自动导入),主要提供了11种方法。 /*** native 方法,用于返回当前运行时对象的 Class…