续Linux磁盘管理part1

软链接

作用就类似windows的快捷方式;

可以快捷的指向另一个文件的特殊文件。

源文件如果删除,快捷方式也就失效了!

ln命令

语法

1
ln [options] [目标文件] [快捷方式]

参数

1
2
-s 创建符号链接,软链接、快捷方式
#ln -s 目标文件绝对路径 快捷方式绝对路径

查询软链接文件本身

我们执行软链接文件时,其实就是执行软链接文件所指的文件,那么软链接文件本身又有什么内容呢?

readlink命令

1
readlink <软链接文件>

使用这条命令我们发现,软链接文件内容就是源文件的路径。

硬链接

先复习一下,什么是块?

1个块是8个连续扇区,大小4kb,块是读写最小单位。

创建硬链接

硬链接

一般情况下,文件名和inode号是一一对应的。

软链接的inode号码,是不一样的,代表软链接文件,是两个单个的文件,硬链接的inode号是一样的。

创建命令

1
ln 目标文件 硬链接文件路径

使用此命令创建的硬链接,inode号相同!

inode

操作系统中专门用于管理和存储文件的信息软件,称之为文件系统。

文件是以文件数据+文件元信息组成的,文件的inode号+文件的数据内容,代表一个单个文件。

信息系统又称文件元信息(源信息,存放文件的创建信息,修改信息,文件大小,等等)。

文件系统将文件的源信息等等存储在了一个称之为inode区域的地方,中文叫做“索引节点”。

inode大小关系

磁盘在格式化的时候,系统自动的分为两部分,一部分是元数据区域,存放文件的inode信息,另一个是文件数据的内容区域。

每个inode的大小,都是在格式化分区的时候决定的,默认是128字节或者256字节。

如何验证大小?

1
dumpe2fs -h /dev/vda1|grep -i 'inode size'

命令

使用ls -l <任意文件>查看文件详细内容

1
2
-rw-r--r--.  1 root root    6788 7月  24 19:10 access.log
-rw-------. 1 root root 1257 7月 12 21:15 anaconda-ks.cfg

第二列的数字1代表该文件为硬链接

查看inode号

使用ls -li <任意文件>在详细内容前再加上inode号

1
2
33574991 -rw-r--r--.  1 root root    6788 7月  24 19:10 access.log
33574979 -rw-------. 1 root root 1257 7月 12 21:15 anaconda-ks.cfg

通过ls -l 查看到的数据,只有文件名不属于inode存储的元信息。

inode元数据区保存:

  • 文件大小
  • 属主信息
  • 文件权限数字
  • 文件修改时间
  • 文件的实体指针(指向block位置)

文件系统

1
df -hT
1
2
3
4
5
6
7
8
9
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 899M 0 899M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 9.6M 901M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 2.6G 15G 15% /
/dev/sda1 xfs 1014M 189M 826M 19% /boot
tmpfs tmpfs 182M 0 182M 0% /run/user/0

工作原理

  1. 用户通过查询文件名,打开文件;
  2. 系统找到文件inode号;
  3. 根据inode号找到文件所在磁盘block,然后读取。

软链接与硬链接

软链接特点

  1. inode号码不同
  2. 软链接可以针对文件夹

硬链接特点

  1. 一般情况,文件名和inode一一对应
  2. 目录文件夹不支持硬链接
  3. 硬链接数量增加,会增加inode号的计数

综合比较

  1. 删除软链接对源文件和硬链接无影响;
  2. 删除硬链接,对软链接、源文件也是无影响;
  3. 删除源文件,对硬链接是无影响的,但是影响软链接(我的理解是:当我们删文件时,只是把指针干掉,磁盘上的数据还是在的,而硬链接inode指向了数据所在位置,所以硬链接还是可以读取);
  4. 只有删除所有的原文件和硬链接,文件的连接数就为0了,此时文件数据丢失;
  5. 源文件和硬链接具有相同的inode号;
  6. 软链接和源文件的inode号码不同,因此是两个单独的文件!

文件系统格式化

vfs文件系统

virtualenv File System

虚拟文件系统

Linux系统的文件系统格式有ext2、ext3、ext4等,vfs处于应用程序与具体文件系统之间,能够实现对多种不同类型的文件进行统一管理。

不同平台的文件系统

windows 98平台

FAT FAT16 FAT32

windows 2000

NTFS

Linux

ext2 ext3(centos5) ext4(centos6) xfs(centos7)

网络共享文件系统

nfs,network file system

smb,server message block 服务消息块

集群文件系统

gfs,google file system #谷歌公司为了存储海量数据而开发的文件系统

ocfs,oracle cluster file system #甲骨文公司为了数据库研发平台而定制的文件系统

分布式文件系统

ceph 为了存储的可靠性和拓展性的分布式文件系统

交换文件系统

swap

区别在于

是否日志型文件系统

日志型文件系统原理:

磁盘是有个区域用于保存日志

  1. 数据写入日志区域
  2. 再应用到文件系统
  3. 能通过读取日志进行数据恢复

文件系统创建工具

创建文件系统

mkfs命令

1
2
3
[root@localhost ~]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.minix
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.xfs

使用特定的命令,可以创建不同的文件系统。

fsck命令

修复文件系统的命令

开机时,默认读取/etc/fstab即开机挂载文件

查看文件系统属性

dumpe2f命令

用于centos7之前的系统

打印系统文件的块组信息,使用与ext2~4

tune2fs命令

centos7以后的系统

设置linux是否开机自启检查文件系统正常与否

lsblk命令

列出所有设备以及文件系统信息

1
lsblk -f #列出分区的文件系统类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 7fdc921b-f892-4c21-8f87-97f26f936673 /boot
└─sda2 LVM2_mem LYVzwm-oAOF-Uxwx-m6tO-Ocrx-D64J-wvpb3G
├─centos-root
xfs 745e580c-314d-4419-b634-97ea40c4ee49 /
└─centos-swap
swap dbb971fd-25ea-43d9-b515-87fd10cba0de [SWAP]
sdb
├─sdb1
└─sdb2
sr0 iso9660 CentOS 7 x86_64
2018-11-25-21-21-31-00

实践格式化文件系统

我们从上面可以看到sdb的两个分区并没有文件系统

为sdb1设置ext4文件系统

1
mkfs.ext4 /dev/sdb1

提示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
122400 inodes, 488264 blocks
24413 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=34078720
60 block groups
8192 blocks per group, 8192 fragments per group
2040 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@localhost ~]#

为sdb2设置xfs文件系统

1
mkfs.xfs /dev/sdb2

提示

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# mkfs.xfs /dev/sdb2
meta-data=/dev/sdb2 isize=512 agcount=4, agsize=579776 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2319104, 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@localhost ~]#

查看一下结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 7fdc921b-f892-4c21-8f87-97f26f936673 /boot
└─sda2 LVM2_mem LYVzwm-oAOF-Uxwx-m6tO-Ocrx-D64J-wvpb3G
├─centos-root
xfs 745e580c-314d-4419-b634-97ea40c4ee49 /
└─centos-swap
swap dbb971fd-25ea-43d9-b515-87fd10cba0de [SWAP]
sdb
├─sdb1 ext4 2ddcc1b2-2acf-4011-8c1b-1ee2858775d7
└─sdb2 xfs af6080aa-49e9-4319-a1a7-d0da302cdd01
sr0 iso9660 CentOS 7 x86_64
2018-11-25-21-21-31-00

关闭文件系统自检

开机自检一般会占用很多时间,我们一般会把它关闭。

1
2
3
[root@localhost ~]# tune2fs -c -1 /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Setting maximal mount count to -1

禁止文件系统开机修复错误

修改/etc/fstab文件

1
2
/dev/mapper/centos-root /                       xfs     defaults        0 0
#这一行的数据

结尾数字为0表示不检查,1表示检查错误

针对磁盘进行修复检查

1
fsck -t 文件系统类型 设备名

修复sdb2

1
fsck -t xfs /dev/sdb2

我们输入以上内容后,报错:

1
2
3
4
[root@localhost ~]# fsck -t xfs /dev/sdb2
fsck,来自 util-linux 2.23.2
If you wish to check the consistency of an XFS filesystem or
repair a damaged filesystem, see xfs_repair(8).

意思是fsck 对于xfs系统来说已经不支持了,需要换成xfs_repair

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@localhost ~]# xfs_repair /dev/sdb2
Phase 1 - find and verify superblock...
Phase 2 - using internal log
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done

修复sdb1

1
fsck -t ext4 /dev/sdb1
1
2
3
4
[root@localhost ~]# fsck -t ext4 /dev/sdb1
fsck,来自 util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb1: clean, 11/122400 files, 25976/488264 blocks