• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
isuning
博客园    首页    新随笔    联系   管理    订阅  订阅
Linux系列教程(10)- 存储结构与磁盘划分

存储结构与磁盘划分

一切从“/”开始

/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
posted on 2022-05-01 22:17  吕布辕门  阅读(155)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3