Bonky
Neither beliver nor reject anything, because any other person has rejected of believed it. Heaven has given you a mind for judging truth and error, Use it.
By Thomas Jefferson

Linux 磁盘与文件系统管理 – 操作

df 命令

Linux 磁盘与文件系统管理 – 操作

文件系统的操作

df 命令

du 命令

ln 实体链接与符号链接

硬链接(链接) hard link

image-20200112132233707

其实就是增加一个文件名链接到某 inode,除了文件名其他信息都是一样的。上图的意思就是,对于目录1和目录2,对应文件的 inode 是相同的。

实体链接最大的好处就是安全。如同上图中, 如果你将任何一个文件删除,其实 inode 与 block 都还是存在的! 此时你可以透过另一个文件来读取到正确的文件数据喔!此外,不论你使用哪个文件来编辑,最终的结果都会写入到相同的 inode 与 block 中,因此均能进行数据的修改。

hard link 只是在某个目录下的 block 多写入一个关连数据,既不会增加 inode 也不会耗用 block 数量。同时我们还需要注意,硬链接是有限制的:

  • 不能跨文件系统
  • 不能 link 目录(当对文件夹建立硬链接时,需要对他下面的所有文件也进行硬链接,这样发生变动的时候会非常复杂)

一般使用方式如下:

软链接(符号链接)Symbolic Link

image-20200112134010535

建立一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的。由于只是利用文件来做为指向的动作, 所以,当来源档被删除之后,软链接的文件会开不了。(相当于建立一个快捷方式)

Symbolic link 所建立的文件为一个独立的新的文件,所以会占用掉 inode 与 block。使用方法如下:

一般来说用 hard link 比较安全,但是 hard link 在用途上面是比较受限的。

同时还有个很有意思的现象:

你注意到了,上面那个链接的大小为 12Bytes 这时因为 /root/a.txt 的总长度为12个字符。(而且软链接和实际的连结数都不会变)

目录的链接数

当你创建一个目录时候,一定会包括以下三个东西:

  • /tmp/testing
  • /tmp/testing/.
  • /tmp/testing/..

其中 /tmp/testing/tmp/testing/. 代表的是自身,所以新建一个目录的链接数都是 2,对于 /tmp/testing/.. 代表知道上层目录,所以上层目录 /tmp 都会增加一。

分区

观察磁盘分区状态

lsblk 列出系统上的所有磁盘列表

lsblk = list block device

结果如下:(其中 MAJ:MIN 分别是主要:次要设备代码。其实核心认识的设备都是透过这两个代码来熟悉)

image-20200112140711001

parted 列出磁盘的分区表类型与分区信息

常用的使用方法如下:

屏幕快照 2020-01-12 下午2.11.55

gdisk/fdisk 磁盘分区:

使用时需要注意:

  • MBR 分区表请使用 fdisk 分区, GPT 分区使用 gdisk 分区。否则会有很严重的后果(如果不知道可以使用 parted 进行查看)
  • 离开时按下 q,那么所有的动作都不会生效。相反的, 按下 w 就是动作生效的意思。所以,你可以随便玩 gdisk ,只要离开时按下的是 q 即可。
  • 只有 root 才能执行。
  • 请注意,使用的设备文件名请不要加上数字,因为 partition 是针对整个磁盘设备而不是某个 partition。所以执行 gdisk /dev/vda1 就会发生错误,要使用 gdisk /dev/vda 才对。

新建分区

然后如果我们想要更新分区表,我们有两种方法

  • 重启系统
  • 利用 partprobe 指令

删除分区

直接再 gdisk 中使用 d,按照指令执行即可。

格式化

直接利用 mkfs 系列工具,一般来说输入 mkfs 按 tab 可以得到操作系统所支持的文件系统格式化功能:

以 xfs 为例,直接后面加上分区路径即可(当然还有些选项需要具体分析):

文件系统检验

无论是 xfs_repair 或 fsck.ext4,这都是用来检查与修正文件系统错误的指令。注意:通常只有身为 root 且你的文件系统有问题的时候才使用这个指令,否则在正常状况下使用此一指令, 可能会造成对系统的危害。

xfs_repair 处理 XFS 文件系统

注意,修复的时候需要卸载文件系统。然后我们知道根目录是无法删除的,如果根目录有问题的话我们需要进入单人维护或救援模式,然后利用 -d 这个选项来处理。

PS:Linux下的启动方式常用的到的有单用户方式、普通多用户方式、完全多用户方式和XWin方式。单用户方式下,系统并没有完全运行进来,只是部分程序运行,这时也不能进行远程登录到Linux系统。进入单用户方式进行系统维护由是ROOT用户来进行完成,而且是由ROOT直接的进入,没有密码检验。这时的ROOT用户对系统有完全的操作权限,可以修复系统的同时,也能随时的对系统进行破坏。

fsck.ext4 处理 EXT4 文件系统

挂载和卸载

挂载点是目录, 而这个目录是进入文件系统的入口。注意,挂载文件系统时候需要满足:

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
  • 单一目录不应该重复挂载多个文件系统
  • 要作为挂载点的目录,理论上应该都是空目录才是(如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失。等到被卸除之后,原本的内容就会再次出现)

常用使用方法如下(codepage 和 iocharset 都是语系数据):

mount 的完整格式如下:

一般来说 -t 选项不需要写(CentOS 会自动识别文件系统类型)。相反地,卸载文件系统使用 umount,卸载时候设备不能处于忙状态:

开机挂载

直接修改 /etc/fstab 文件:

image-20200112175113876

可以看到,上面一共有六行,分别是:

第一个可以有下面三种写法:

  • 文件系统或磁盘的装置文件名,如 /dev/vda2 等
  • 文件系统的 UUID 名称,如 UUID=xxx
  • 文件系统的 LABEL 名称,例如 LABEL=xxx

第二个是挂载点,第三个是文件系统的格式(这里需要手动填写),第四个是文件系统参数,就是 mount -o 后面所接的参数,第五个能否被 dump 备份指令作用,一般填0就 OK 了。

第六个是是否以 fsck 检验扇区,早期开机的流程中,会有一段时间去检验本机的文件系统,看看文件系统是否完整 (clean)。 不过这个方式使用的主要是透过 fsck 去做的,我们现在用的 xfs 文件系统就没有办法适用,因为 xfs会自己进行检验,不需要额外进行这个动作!所以直接填 0 就好了。

/etc/fstab 是开机时的配置文件,不过,实际文件系统的挂载是记录到 /etc/mtab/proc/mounts 这两个文件当中的。每次我们在更动文件系统的挂载时,也会同时更动这两个文件。

但进入单人维护模式时候,/ 可是只读的状态,当然你就无法修改 /etc/fstab ,也无法更新 /etc/mtab,但不过我们可以使用以下命令:

挂载镜像文件

修改参数

mknod 生成设备文件

Linux 核心 2.6 版以后,硬件文件名已经都可以被系统自动的实时产生了,我们根本不需要手动建立设备文件。但是当你改变根目录(chroot)的时候,可能需要手动处理。

常见设备代码的如下:

磁盘文件名 Major Minor
/dev/sda 8 0-15
/dev/sdb 8 16-31
/dev/loop0 7 0

PS:loop 设备的作用就是不把镜像文件刻录就可以挂载使用。

xfs_admin

xfs_admin 的作用是修改 XFS 文件系统的 UUID 与 Label name:

tune2fs

tune2fs 的作用是修改 ext4 的 label name 与 UUID

设置交换区

一般有两种方法:设定一个交换分区,或者建立一个虚拟内存的文件。

交换分区

  1. 分区:先使用 gdisk 在你的磁盘中分区出一个分区槽给系统作为 swap 。
  2. 格式化:利用 mkswap 装置文件名 就能够格式化该分区槽成为 swap 格式。
  3. 使用:最后将该 swap 装置启动,方法为:swapon 装置文件名
  4. 观察:最终透过 freeswapon -s 这个指令来观察一下内存的用量吧!

虚拟内存文件

  1. 创建文件:直接利用 dd 命令创建文件,dd if=/dev/zero of=/tmp/swap bs=1M count=128
  2. 转换格式:利用 mkswap 文件 讲文件转换为 swap 格式。
  3. 使用:swapon swap文件
  4. 关闭:使用 swapoff 关掉 swap file
Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注