Linux文件系统

前言

在Windows系统中,买了一块新的硬盘加到电脑之后,需要对分区进行格式化才能使用,Linux系统中也是一样,首先我们要了解一下什么是文件系统。

1.了解文件系统 

分区很复杂,但是为了好理解不妨先简化介绍。首先来看图 14-1,记住这是一个分区Linux文件系统_第1张图片 

当对一个分区格式化时,分区被分成两部分。 

(1)右侧部分被划分成很多小格子,每个小格子称为block,默认大小为4KB。

(2)左侧部分为inode,用于记录文件的属性,每个文件都会占用一个 inode。 

每个block中只能存储一个文件,假设一个文件aa只有1KB存放在2号block中,则2号block还剩余3KB的空间,但是这3KB的空间也不会存储其他数据了。所以,此文件大 小为1KB,占用空间为4KB,在Windows中会见到图14-2所示的情况。

Linux文件系统_第2张图片 

2.了解硬链接

前面讲了inode记录的是某文件的属性信息,如图14-3所示 

Linux文件系统_第3张图片

10号 inode记录了aa文件的属性,包括aa文件的名称、大小、权限等,及其所在的
block,可以在10号inode中给aa文件再起一个名称bb,如图14-4所示。

Linux文件系统_第4张图片 

此时对10号inode来说,用两个名称aa和 bb来记录2号block中的文件,所以 aa和 bb对应的是同一个文件,那么aa和 bb就是硬链接关系。
练习:先拷贝一个测试文件,命令如下。
[root@RHEL8 ~]# cp /etc/hosts aa
[root@RHEL8 ~]# 

查看aa的属性,命令如下 

[root@RHEL8 ~]# ls -lh aa
总用量 4.0K
-rw-r--r--. 1 root root 158 12月  4 11:06 hosts
[root@RHEL8 ~]# 
此处的加粗字1,指的是aa文件只有一个硬链接,即存储在 block中的文件只有一个名称
aa。下面对aa做硬链接,命令如下。
[root@RHEL8 ~]# ln aa bb

 查看aa和bb的属性,命令如下。

[root@RHEL8 ~]# ls -lh aa bb
-rw-r--r--. 2 root root 0 12月  4 11:13 aa
-rw-r--r--. 2 root root 0 12月  4 11:13 bb
[root@RHEL8 ~]# 
硬链接数显示为2,说明存储在 block中的那个文件有两个名称aa和 bb。aa和 bb是在同 一个inode上记录的两个名称,通过ls -i可以查看aa和 bb分别是在哪个inode上记录的,命令如下。
[root@RHEL8 ~]# ls -i aa; ls -i bb
135226345 aa
135226345 bb
[root@RHEL8 ~]# 
可以看到, inode值是--样的。即在同-个inode上用两个名称来记录 block中的那个文
件。换言之就是aa和bb对应的是同一个文件,修改aa之后会发现.bb的内容也做了相同的修改,修改bb之后会发现aa也做了相应的修改。

3.创建文件系统 

3.1 分区 

使用fdisk -1命令查看所有分区信息,命令如下。 

[root@node1 ~]# fdisk -l

磁盘 /dev/sda:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a3800

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     4196351     2097152   83  Linux
/dev/sda2         4196352     8390655     2097152   82  Linux swap / Solaris
/dev/sda3         8390656   209715199   100662272   83  Linux

磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[root@node1 ~]# 
分区的语法为“fdisk /devl/硬盘”,这里是对硬盘进行分区,而不是对分区再进行分
[root@node1 ~]# fdisk /dev/sdb 
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x79818f62 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):
此处进入分区的界面,按提示输入“m”可以获取帮助,常见的命令如下。
(1)p:打印分区表。
(2)n:添加一个分区。
(3)d:删除一个分区。 (4)1:列出分区类型。
(5)t:转换分区类型。
(6)q:不保存直接退出。
(7)w:保存并退出。

查看现有分区信息,此处输入“p”,命令如下。  

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x79818f62

   设备 Boot      Start         End      Blocks   Id  System

命令(输入 m 获取帮助):
此处并没有看到/dev/sdb1、/dev/sdb2等内容,说明并不存在任何分区。
按【n】键创建一个分区,命令如下。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 

 

直接在硬盘上划分的分区有主分区(标记为p)和扩展分区(标记为e),逻辑分区(标记为 1)只能在扩展分区上创建,且扩展分区最多只能创建一个扩展分区。
所以,在硬盘中没有扩展分区时,选择分区类型时只能选择p和e这两种。如果已经存在 了扩展分区,就不能再创建第二个扩展分区了,但可以在扩展分区上创建逻辑分区,所以可 选择的分区类型有p和1。
先创建主分区或扩展分区都可以,这里先创建主分区,输入“p”,按【Enter】键。主 分区加扩展分区最多只能创建出来4个,所以分配的编号只能是1~4,这里选择默认的1,然后按【Enter】键。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-104857599,默认为 2048):
硬盘总共有41943039个扇区,第一个分区从哪个扇区开始呢?默认为2048,直接按
【Enter】键,我们就从2048扇区开始

 

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-104857599,默认为 2048):
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-104857599,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB

4.格式化

创建好分区之后,将分区进行格式化。格式化的语法如下 

mkfs ‐f 文件系统 ‐选项 /dev/分区
或
mkfs.文件系统 ‐选项 /dev/分区

练习:把/dev/sdb1格式化为XFS文件系统,命令如下。  

[root@node1 ~]# mkfs.xfs /dev/sdb1 
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node1 ~]# 
从上面的 bsize=4096可以看到,block的大小默认设置为了4KB,如果指定为1KB,需要 加上-b size=1024选项,命令如下。
[root@node1 ~]# mkfs.xfs -b size=1024 /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@node1 ~]# 
再次格式化时,因为/dev/sdbl已经存在文件系统了,所以再次格式化失败,需要加上-f 选项表示强制格式化,命令如下。
[root@node1 ~]# mkfs.xfs -f -b size=1024 /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=1024   blocks=2097152, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=1024   blocks=10240, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node1 ~]# 
记住,block size的大小只能在格式化时指定,不可以后期修改。

你可能感兴趣的:(linux)