第六节.Linux文件系统及磁盘管理

最后更新于 2021-10-08 497 次阅读


1.了解文件系统

(1)概念

一个操作系统用于明确存储设备或分区上的文件的方法和数据结构,也就是在储存设备上组织文件的方法。windows系统中支持FAT和NTFS文件系统,Linux中支持ext1、ext2、ext3、ext4、XFS等文件系统。

(2)Linux文件系统的运行逻辑

Linux文件系统根据存储文件的不同属性,比如文件的实际内容、权限(rwx)与文件属性(拥有者、工作组等)将这两部分数据分别存放在不同的区块之中。

Linux文件系统主要含有的区块分别是:inode;数据区块;超级区块

①inode(索引节点)

专门记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所存再的区块号码

例如:ls -il /tmp

inode演示
②数据区块

记录文件的实际数据内容,文件过大时,会占用多个区块

③超级区块

记录此文件系统下的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等

2.文件系统操作

(1)查看磁盘及目录的容量

①“df”命令:查看文件系统的整体磁盘使用量

命令格式:df 【-option】 目录/文件名

例如:df -h /tmp

常用参数:

-a:列出所有的文件系统,包括系统特有的/proc等文件系统

-h:以易读的容量格式(KB,MB,GB)来表示

-i:不用磁盘容量,而以inode的数量来显示;

②“du”命令:查看文件的磁盘使用量(常用在查看目录所占磁盘空间)

命令格式:du 【-option】 文件/文件名

例如:du -ah /etc/v2ray-agent/xray/access.log

常用参数:

-a:统计所有的文件及目录容量,默认下du只列出目录的容量

带-a和不带 -a参数的对比
可见加上 -a参数后,du显示了文件的容量

-h:以易读的容量格式显示

-s:仅列出总量,而不列出每个各别的目录占用容量

-k:以KBytes单位显示

-m:以MBytes单位显示

(2)硬链接与符号链接

①硬链接

从以上的学习中,我们得知,Linux的文件系统中,一个文件会占用一个inode,文件的内容由inode的记录来指向,文件的名字与目录有关,而内容则与inode有关。而硬链接,就是建立一个或多个指向同一个inode,但是文件名不同的文件。多个硬链接之间,删除其中一个关联文件,只要其他目录还有关联文件,数据就不会被删除。

同一个 inode
②符号链接

符号链接就类似于windows里的快捷方式,建立的符号链接和源文件的inode不同,也就是说是两个不同的文件。

不同的 inode
③“ln”命令:建立硬链接或符号链接

命令格式:ln 【-sf】 源文件 目标文件

例如:ln -s /tmp/bashrc /tmp/bashrc_sd

常用参数:

-s:ln命令默认不加参数的情况是建立硬链接,而加入-s后,就是建立符号链接

-f:如果目标文件存在,就主动将目标文件删除之后再建立

3.查看磁盘分区及内容

(1)观察磁盘分区状态

①“lsblk”命令:列出所有储存设备的信息

lsblk=list block device

命令格式:lsblk 【-d f i m p t】 【device】

例如:lsblk

输出信息解答:

NAME:设备文件名

RM:是否为可卸载设备

SIZE:容量

RO:是否是只读设备

TYPE:是磁盘(disk),还是分区(partition),还是只读存储器(ROM)输出

MOUNTPOINT:挂载点

常用参数:

-d:仅列出磁盘本身,不列出分区数据

不带 -d参数和带 -d参数的对比

-f:同时列出该磁盘内的文件系统名称

-i:使用ASCII字符输出

-m:同时输出该设备在/dev下的权限信息

-p:列出设备的完整名

②“blkid”命令:如同lsblk -f,列出文件系统与设备的名称、UUID数据和文件系统名称
③“parted”命令:列出磁盘的分区表类型及分区信息

命令格式:parted 【device】 print

例如:parted /dev/vda print

Partition Table表示分区格式,msdos就是MBR分区,gpt的话就是gpt分区

4.学会如何为硬盘分区及建立挂载点

(1)gdisk分区命令

通过【lsblk】命令的查询,我们可以得到当前这个硬盘的分区信息

lsblk命令演示

可知我们的硬盘的路径为/dev/sda,接下来,我没就可以使用这个硬盘来进行我们的分区操作,不过在分区操作进行前,我们需要查看这个硬盘的分区表格式,看看是MBR分区,还是GPT分区

使用【parted】命令,查看磁盘分区表类型

例:parted /dev/sda print

知道是gpt分区后,我们就可以使用gdisk命令来给硬盘进行分区了

命令格式:gdisk 硬盘路径

例如:gdisk /dev/sda

gdisk命令演示

进入gdisk的界面后,可以使用【?】来查询具体的命令

gdisk的可用命令

常用命令:

p:展示当前硬盘的分区情况

n:添加新的磁盘分区

d:删除一个磁盘分区

l:查询可用的文件系统编号信息

w:保存并写入

q:直接退出

①.案例演示

我想要在/dev/sda里多分出两个分区,分别是1GB的xfs Linux和window的vfat分区,如何操作?

首先我们已知/dev/sda是gpt分区了,所以直接可以使用gdisk命令

gdisk /dev/sda

然后输入n参数,接着依照提示输入分区的序号,这里默认是4,我们就输入4

接着会让我们输入起始的扇区,这里我们默认就好

然后接着会让我们输入终止扇区,这里我们要手动输入该分区的大小,使用【+1G】这种格式来建立一个我们想要的分区大小

接着,我们要输入这个分区的文件系统编号,linux常用的为8200(swap)、8300、8e00;Windos常用的为0700,这里我先创建一个Linux的文件信息系统,输入8300

输入完后按p,可见我们已经创建好了一个Linux使用的文件系统分区

接着我们按照上边的步骤在创建一个windows的文件系统分区,然后输入【w】保存分区信息!

但是此时我们使用【lsblk】命令查询会发现我们创建的分区还没有被写进内核里,所以我们要使用【partprobe -s】来更新内核内容

此时我们完成了硬盘的分区,如果要删除分区的话,就使用d参数

(2)mkfs格式化磁盘(创建文件系统)

创建了新的硬盘分区后,我们还不能直接在分区上挂载目录,我们需要先对硬盘进行一个格式化,为其选定一个文件系统(xfs或ext4等。。)

命令格式:mkfs.xfs 设备路径

mkfs.ext4 设备路径

例如:mkfs.xfs /dev/sda5

格式化后通过【blkid】查询,可见已经将其格式化为了xfs文件系统格式

这里我们要记住其UUID,这对我们后边进行目录挂载很有用

(3)文件系统的挂载与卸载

挂载点是一个目录,这个目录就是进入磁盘分区的入口,其实就相当于windows中的磁盘的盘符

①.文件系统的挂载

文件系统在进行挂载时,使用【mount】命令

命令格式:mount -a

mount UUID=“” 挂载点

mount 设备名(/dev/sda5) 挂载点

mount LABEL=“” 挂载点

例如:mount UUID=“17b3cf6d-e04a-4646-bd10-9ffc6995b0bc” /backups

常用参数

-a:自动挂载,依照配置文件/etc/fstab的数据将所有未挂载的磁盘挂载上来

-o:后面可以接一些挂载时额外加上的参数,比如帐号、密码、读写权限

例如:ro,rw:挂载系统变为只读(ro),或只写(ow)

remount:重新挂载时经常使用的参数

--bind:讲一个目录额外挂载到另外一个目录

例:mount --bind /var /data/var

将/var挂载到/data/var上,也就是说进入/data/var就等于进入/var

案例演示:

我们继续使用上边我们格式化好的两个文件系统,我们将其分别挂载在/backups和/winbk这两个目录上

我们使用绑定UUID的方法来进行挂载,首先我们使用【blkid 】命令查看/dev/sda4的UUID

在知道UUID后,我们使用【mkdir】命令分别创建/backups和/winbk这两个文件夹

然后使用命令:amount UUID=“17b3cf6d-e04a-4646-bd10-9ffc6995b0bc” /backups 挂载linux分区

windows分区的命令也差不多,挂载后使用lsblk查询结果

/dev/sda4和/dev/sda5就分别挂载到/backups和/winbk上了,现在进入/backups就等于进入了/dev/sda4里

②.文件系统的卸载

命令格式:umount 【-f l n】 设备名或挂载点

例:umount -f /dev/sda4 或umount -f /backups

常用参数:

-f:强制卸载

-l:立刻卸载文件系统,比-f更强

-n:不更新/etc/mtab的情况下卸载