存储结构与磁盘划分
一切从“/”开始
/boot 开机所需文件 — 内核、开机菜单以及所需配置文件等
/dev 以文件形式存放任何设备与接口
/etc 配置文件
/home 用户家目录
/bin 存放单用户模式下还可以操作的命令
/lib 开机时用到的函数库,以及/bin 与/sbin 下面的命令要调用的函数
/sbin 开机过程中需要的命令
/media 用于挂载设备文件的目录
/opt 放置第三方的软件
/root 系统管理员的家目录
/srv 一些网络服务的数据文件目录
/tmp 任何人均可使用的“共享”临时目录
/proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbin Linux 系统开机时不会使用到的软件/命令/脚本
/usr/share 帮助与说明文件,也可放置共享文件
/var 主要存放经常变化的文件,如日志
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里
文件系统与数据资料
RHEL 7 系统中一个比较大的变化就是使用了 XFS 作为文件系统,这不同于 RHEL 6 使用的 Ext4。
在拿到了一块新的硬盘存储设备后,也需要先分区,然后再格式化文件系统,最后才能挂载并正常使用。硬盘的分区操作取决于您的需求和硬盘大小;您也可以选择不进行分区,但是必须对硬盘进行格式化处理。
硬件设备
一台主机上可以有多块硬盘,因此系统采用 a~p 来代表 16 块不同的硬盘(默认从 a 开始
分配),而且硬盘的分区编号也很有讲究:
➢ 主分区或扩展分区的编号从 1 开始,到 4 结束;
➢ 逻辑分区从编号 5 开始。
可以使用以下方法查看磁盘格式类型
[root@AServer120Host /]# file -s /dev/sdb
/dev/sdb: LVM2 PV (Linux Logical Volume Manager), UUID: yjc6Zy-JV7Q-zRwc-Mzqq-VQ7d-xLjZ-410azR, size: 107374182400
[root@AServer120Host /]# file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 2048, 2097152 sectors; partition 2: ID=0x8e, starthead 170, startsector 2099200, 81786880 sectors, code offset 0x63
挂载硬件设备
mount
mount 命令用于挂载文件系统,格式为“mount 文件系统 挂载目录”。
- 临时挂载
例如,要把设备/dev/sdb2 挂载到/backup 目录,只需要在 mount 命令中填写设备与挂载目录
参数就行,系统会自动去判断要挂载文件的类型,因此只需要执行下述命令即可:
[root@linuxprobe ~]# mount /dev/sdb2 /backup
- 永久挂载
虽然按照上面的方法执行 mount 命令后就能立即使用文件系统了,但系统在重启后挂
载就会失效,也就是说我们需要每次开机后都手动挂载一下。这肯定不是我们想要的效果,
如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式
“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”(各字段的意义见表 6-4)
写入到/etc/fstab 文件中。这个文件中包含着挂载所需的诸多信息项目,一旦配置好之后就
能一劳永逸了
[root@linuxprobe ~]# vim /etc/fstab
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper /rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb2 /backup ext4 defaults 0 0
umount
umount 命令用于撤销已经挂载的设备文件,格式为“umount [挂载点/设备文件]”。
我们来尝试手动卸载掉/dev/sdb2 设备文件:
[root@linuxprobe ~]# umount /dev/sdb2
添加硬盘设备
https://www.cnblogs.com/dion-90/articles/8579741.html
在虚拟机中模拟添加了硬盘设备后就应该能看到抽象成的硬盘设备文件
df命令查看磁盘的分区和已经使用量
# df -h
利用du命令查询当前目录下的所有目录/文件所占的容量
# du -ah
fdisk
fdisk 命令用于管理磁盘分区,格式为“fdisk [磁盘名称]”,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区信息
w 保存并退出
分区信息
我们通过 fdisk -l 查看硬盘及分区信息
# fdisk -l
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA) 主分区
/dev/sda2 26 125 806400 5 Extended 扩展分区
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
Disk /dev/sdb: 21.5 GB, 21474836480 bytes #第二个硬盘识别,这个硬盘的大小
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes/512 bytes Disk identifier: 0x00000000
其中 sda 有两个主分区(包括扩展分区),分别是 hda1 和hda2 (扩展分区);逻辑分区是 sda5 hda6 ;
硬盘总容量=主分区(包括扩展分区)总容量
扩展分区容量=逻辑分区总容量
第二块硬盘 /dev/sdb 已经可以被识别了,但是没有可分区。
说明:
引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区;
Start (开始):表示的一个分区从X cylinder(磁柱)开始;
End (结束):表示一个分区到 Y cylinder(磁柱)结束;
id和System 表示的是一个意思,id看起来不太直观,我们要在fdisk 一个分区时,通过指定id来确认分区类型;比如 7表示的就NTFS 分区;这个在fdisk 中要通过t功能来指定。下面的部份会提到;
Blocks(容量):这是我翻译的,其实不准确,表示的意思的确是容量的意思,其单位是K;一个分区容量的值是由下面的公式而来的;
Blocks = (相应分区End数值 - 相应分区Start数值)x 单位cylinder(磁柱)的容量
估算一个存储设备是否被完全划分
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000bd101
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 83886079 40893440 8e Linux LVM
比如sda设备,我们看到的是 83886080 sectors ;我们通过 sda的分区表可以看到上一个分区的End的值+1 就是下一个分区的Start 的值;比如 sda2的Start的值是 sda1 的End 的值+1,这证明 sda1 和sda2 中间没有空白分区,是连续的,以此类推;在 sda2,我们看到 End 的值是83886079 ,而在fdisk -l头部信息中也有83886080 sectors,证明这个硬盘已经完全划分
分区
我们首先使用 fdisk 命令来尝试管理/dev/sdb 硬盘设备。在看到提示信息后输入参数 p 来
查看硬盘设备内已有的分区信息,其中包括了硬盘的容量大小、扇区个数等信息:
# fdisk /dev/sdb
Command (m for help): p
输入参数 n 尝试添加新的分区。系统会要求您是选择继续输入参数 p 来创建主分区,还
是输入参数 e 来创建扩展分区。这里输入参数 p 来创建一个主分区:
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
在确认创建一个主分区后,系统要求您先输入主分区的编号。我们在前文得知,主分区的编
号范围是 1~4,因此这里输入默认的 1 就可以了。接下来系统会提示定义起始的扇区位置,这不
需要改动,我们敲击回车键保留默认设置即可,系统会自动计算出最靠前的空闲扇区的位置。最
后,系统会要求定义分区的结束扇区位置,这其实就是要去定义整个分区的大小是多少。我们不
用去计算扇区的个数,只需要输入+2G 即可创建出一个容量为 2GB 的硬盘分区。
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
再次使用参数 p 来查看硬盘设备中的分区信息。果然就能看到一个名称为/dev/sdb1、起
始扇区位置为 2048、结束扇区位置为 4196351 的主分区了。这时候千万不要直接关闭窗口,
而应该敲击参数 w 后回车,这样分区信息才是真正的写入成功啦。
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x47d24a34
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
在上述步骤执行完毕之后,Linux 系统会自动把这个硬盘主分区抽象成/dev/sdb1 设备文
件。有些时候
系统并没有自动把分区信息同步给 Linux 内核,而且这种情况似乎还比较常见(但不能算作
是严重的 bug)。我们可以输入 partprobe 命令手动将分区信息同步到内核,而且一般推荐连续
两次执行该命令,效果会更好。
[root@linuxprobe ]# file /dev/sdb1
/dev/sdb1: cannot open (No such file or directory)
[root@linuxprobe ]# partprobe
[root@linuxprobe ]# partprobe
[root@linuxprobe ]# file /dev/sdb1
/dev/sdb1: block special
格式化
在对存储设备进行分区后还需要进行格式化操作
[root@linuxprobe ~]# mkfs.xfs /dev/sdb1
终于完成了存储设备的分区和格式化操作,接下来就是要来挂载并使用存储设备了
[root@linuxprobe ~]# mkdir /newFS
[root@linuxprobe ~]# mount /dev/sdb1 /newFS/
[root@linuxprobe ~]# df -h
不分区直接格式化
假设新硬盘是 /dev/sdc
fdisk操作的是/dev/sdc ,分区后才会有/dev/sdc1 /dev/sdc2 之类
一般mkfs.ext4 /dev/sdc1 来格式化一个分区,再mount /dev/sdc1
不过你也可以不分区,直接mkfs.xfs/dev/sdc ,然后mount /dev/sdc
可以使用以下方法查看磁盘格式类型
# file -s /dev/sdb
du
用于查看文件数据占用量的 du 命令,其格式为“du [选项] [文件]”。
如果想让这个设备文件的挂载永久有效,则需要把挂载的信息写入到配置文件中
[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper /rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
添加交换分区
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常
用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设
计目的是为了解决真实物理内存不足的问题。但由于交换分区毕竟是通过硬盘设备读写数据的,
速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。
交换分区的创建过程与前文讲到的挂载并使用存储设备的过程非常相似。在对/dev/sdb 存
储设备进行分区操作前,有必要先说一下交换分区的划分建议:在生产环境中,交换分区的
大小一般为真实物理内存的 1.5~2 倍
使用 SWAP 分区专用的格式化命令 mkswap,对新建的主分区进行格式化操作
[root@linuxprobe ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 5242876 KiB
no label, UUID=2972f9cb-17f0-4113-84c6-c64b97c40c75
使用 swapon 命令把准备好的 SWAP 分区设备正式挂载到系统中。我们可以使用 free -m 命
令查看交换分区的大小变化(由 2047MB 增加到 7167MB)
[root@linuxprobe ~]# free -m
[root@linuxprobe ~]# swapon /dev/sdb2
[root@linuxprobe ~]# free -m
为了能够让新的交换分区设备在重启后依然生效,需要按照下面的格式将相关信息写入
到配置文件中,并记得保存
[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper /rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /newFS xfs defaults 0 0
/dev/sdb2 swap swap defaults 0 0
软硬方式链接
在 Linux 系统中存在硬链接和软连接两种文件。
➢ 硬链接:可以将它理解为一个“指向原始文件 inode 的指针”,系统不为
它分配独立的 inode 和文件。所以,硬链接文件与原始文件其实是同一个文件,只
是名字不同。我们每添加一个硬链接,该文件的 inode 连接数就会增加 1;而且只
有当该文件的 inode 连接数为 0 时,才算彻底将它删除。换言之,由于硬链接实际
上是指向原文件 inode 的指针,因此即便原始文件被删除,依然可以通过硬链接文
件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链
接。
➢ 软链接:仅仅包含所链接文件的路径名,因此能链
接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件
也将失效,从这一点上来说与 Windows 系统中的“快捷方式”具有一样的性质。
ln 命令用于创建链接文件,格式为“ln [选项] 目标”
-s 创建“符号链接”(如果不带-s 参数,则默认创建硬链接)
-f 强制创建文件或目录的链接
-i 覆盖前先询问
-v 显示创建链接的过程
软链接
[root@linuxprobe ~]# echo "Welcome to linuxprobe.com" > readme.txt
[root@linuxprobe ~]# ln -s readme.txt readit.txt
[root@linuxprobe ~]# cat readme.txt
Welcome to linuxprobe.com
[root@linuxprobe ~]# cat readit.txt
Welcome to linuxprobe.com
[root@linuxprobe ~]# ls -l readme.txt
-rw-r--r-- 1 root root 26 Jan 11 00:08 readme.txt
[root@linuxprobe ~]# rm -f readme.txt
[root@linuxprobe ~]# cat readit.txt
cat: readit.txt: No such file or directory
硬链接
[root@linuxprobe ~]# echo "Welcome to linuxprobe.com" > readme.txt
[root@linuxprobe ~]# ln readme.txt readit.txt
[root@linuxprobe ~]# cat readme.txt
Welcome to linuxprobe.com
[root@linuxprobe ~]# cat readit.txt
Welcome to linuxprobe.com
[root@linuxprobe ~]# ls -l readme.txt
-rw-r--r-- 2 root root 26 Jan 11 00:13 readme.txt
[root@linuxprobe ~]# rm -f readme.txt
[root@linuxprobe ~]# cat readit.txt
Welcome to linuxprobe.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY