linux磁盘管理 磁盘冗余阵列


总结mount命令用法,参数、挂载选项

mount命令可以将指定的文件系统,挂载到指定的目录(挂载点),再linux系统下必须先挂载后才能访问设备资料
mount  /dev/sdb  /mnt  #把sdb这个磁盘挂载到/mnt这个目录

mount -l 显示挂载情况


mount -a 读取/etc/fstab所有的挂载设置


mount -o 选项
mount -o ro 只读
mount -o rw 读写
mount -o rw,exec 允许执行
mount -o noexec,rw 不允许执行
-l	显示系统以挂载的设备信息
-a	加载文件/etc/fstab中设置的所有设备
-t	t<文件系统类型> 指定设备的文件系统类型。如果不设置,mount自行选择挂载的文件类型 minix Linux最早使用的文件系统。 ext2 Linux目前的常用文件系统。 msdos MS-DOS 的 FAT。 vfat Win85/98 的 VFAT。 nfs 网络文件系统。 iso9660 CD-ROM光盘的标准文件系统。 ntfs Windows NT的文件系统。 hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。 auto 自动检测文件系统。
-o	添加挂载选项,是安全、性能优化重要参数
-r	只读,等于-o ro
-w	读写,等-o rw
mount -o选项详解
参数	含义
async	以异步方式处理文件系统I/O操作,数据不会同步写入磁盘,而是写到缓冲区,提高系统性能,但损失数据安全性
sync	所有I/O操作同步处理,数据同步写入磁盘,性能较弱,数据安全性高
atime/noatime	文件被访问时是否修改时间戳,不更改时间,可以提高磁盘I/O速度
auto/noauto	通过-a参数可以自动被挂载/不自动挂载
defaults	默认值包括rw、suid、dev、exec、auto、nouser、async,/etc/fstab大多默认值
exec/noexec	是否允许执行二进制程序,取消提供安全性
suid/nosuid	是否允许suid(特殊权限)生效
user/nouser	是否允许普通用户挂载
remount	重新挂载
ro	只读
rw	读写

退出光盘的命令

Eject弹出设备命令
eject # 弹出光驱

eject -r /dev/sr0 # 指定设备弹出

inode、block、硬链接

文件属性查看

[root@bogon ~]# ll -h tet.log 
-rw-r--r--. 1 root root 5 Apr  7 16:34 tet.log

文件权限, 硬链接数量,属主,属组,文件大小,文件修改时间,文件名

查看文件、文件夹的inode信息

可以用stat命令,查看某个文件的具体inode信息

[root@bogon ~]# stat tet.log 
  File: ‘tet.log’
  Size: 5         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 36771844    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-04-07 16:33:41.488885493 +0800
Modify: 2022-04-07 16:34:01.878883907 +0800
Change: 2022-04-07 16:34:01.878883907 +0800
 Birth: -
[root@bogon ~]# ll -hi tet.log 
36771844 -rw-r--r--. 1 root root 5 Apr  7 16:34 tet.log



[root@bogon ~]# ll -hi /opt
total 0
  279893 -rw-r--r--. 1 root root 0 Apr  7 16:57 t1.txt
36771867 drwxr-xr-x. 2 root root 6 Apr  7 16:58 t2


[root@bogon ~]# stat /opt
  File: ‘/opt’
  Size: 30        	Blocks: 0          IO Block: 4096   directory
Device: fd00h/64768d	Inode: 83          Links: 3
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:usr_t:s0
Access: 2022-04-07 17:18:12.363677726 +0800
Modify: 2022-04-07 16:58:09.023771334 +0800
Change: 2022-04-07 16:58:09.023771334 +0800
 Birth: -

什么是inode

linux的文件名,其实是分为了【元数据】+【文件内容】,两部分

元数据,也就是文件的属性信息,可以通过stat命令查看到

一个新的磁盘,格式化文件系统后,就有了2个存储空间,一个叫做
inode存储空间,存储设备上,所有文件名,对应的元数据信息(文件的属性信息)
一个叫做block存储空间(存储设备上,所有的文件的内容,数据都在这)

存储元数据信息的空间,被称之为Inode

存储文件数据的空间,被称之为block


linux读取文件内容,其实是 以  文件名 > inode编号 > block 的顺序来读取


在你创建文件前必须先要分区、格式化(创建文件系统)
创建文件系统后inode和block的数量就会固定下来。
mkfs.xfs /dev/sdc 格式化xfs文件系统后,inode和block的数量就固定下来了
可以通过xfs_info查看


每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
[root@bogon ~]# ls -l -i /opt
total 0
 3635430 -rw-r--r--. 1 root root 0 Apr  7 18:14 666.log
  279893 -rw-r--r--. 1 root root 0 Apr  7 16:57 t1.txt
36771867 drwxr-xr-x. 2 root root 6 Apr  7 16:58 t2

通过ls -i参数,查看文件,文件夹的inode号码

Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。


使用如下命令,查看文件的inode号
ls -i

为什么linux要设计inode

理解inode,要从文件储存说起。

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

对inode和block的理解

一个新的磁盘,格式化文件系统后,就有了两个储存空间,

一个叫做inode存储空间,存储设备上,所有文件名,对应的元数据信息(文件的属性信息)
linux系统内部不使用文件名,而是使用inode号码来识别文件,对于系统来说,文件名只是inode号码便于识别的别称或者绰号

一个叫做block存储空间,(存储设备上所有的文件的内容,数据都在这里)
block是linux实际存储数据的空间,是8个连续的扇区,(8*512bytes=4KB)
单个大文件需要用多个block来储存
特别小的文件即使不满足4KB,也只能浪费其空间
1 block = 4KB


存储元数据信息的空间,被称为inode
存储文件数据的空间,被称为block

linux读取文件内容,其实是以文件名 > inode编号 > block  的顺序来读取的
用户通过文件名,打开文件。实际上系统内部这个过程分为了三步:
首先,系统找到这个文件名对应的inode号码;
其次:通过inode号码,获取inode信息;
最后:根据indoe信息,找到文件数据所在的block,读取数据

inode存储哪些内容

inode 包含很多的文件元信息,但不包含文件名
每一个inode都有一个号码,操作系统用inode号码来识别不同的文件

文件的字节数

文件的拥有者的User ID

文件的Group ID

文件的读写执行权限

文件的时间戳,总共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间

文件数据block的位置

linux的文件名、和inode、block的关系

在创建文件前必须要先分区,格式化创建文件系统,在创建文件系统后inode和block的数量就会固定下来,
inode存储空间,存储设备上,所有文件名,对应的元数据信息(文件的属性信息)
block存储空间,(存储设备上所有的文件的内容,数据都在这里)

linux读取文件内容,其实是以文件名 > inode编号 > block  的顺序来读取的
用户通过文件名,打开文件。实际上系统内部这个过程分为了三步:
首先,系统找到这个文件名对应的inode号码;
其次:通过inode号码,获取inode信息;
最后:根据indoe信息,找到文件数据所在的block,读取数据

文件夹和文件的关系、从inode的角度理解

目录是个特殊文件,目录保存的时当前目录的文件名字
文件夹就是方便人类记忆文件存在哪里,然后通过这个文件名,找到对应的文件inode号
inode号里记录了文件数据所处的block位置,最终访问到数据




每个inod都有一个号码,操作系统用indoe号码来识别不同的文件
可以通过ls -i参数来查看文件,文件夹的indoe号码
[root@bogon ~]# ls -lh -i /opt
total 0
  279893 -rw-r--r--. 1 root root 0 Apr  7 16:57 t1.txt
36771867 drwxr-xr-x. 2 root root 6 Apr  7 16:58 t2

删除文件和inode、block的关系

硬链接、软连接的区别,以及用法

软连接,文件储存的时源文件的路径
1,创建软连接  ln -s
2,访问软连接文件
3,其实时访问到源文件的路径,源文件的文件名
4,访问源文件的indoe号   ls -i
5,indoe找到block,访问到数据

软连接文件的inode号和源文件不同,作用时存储源文件的路径
删除普通软连接,不影响源文件
删除源文件,软连接找不到目标,报错提示

硬链接就是一个数据(block)被多个相同的indoe号的文件指向
注意:不得跨分区设置(indoe号,是基于分区来创建的)
表示文件,属性完全一致,数据也是同一个block区域
称之为硬链接
由于文件夹中存在两个特殊的子目录,
一个是 . 当前目录,表示其本身
一个是 .. 上一级目录,也可以通过它,找到当前目录
如果修改文件的硬链接数,要在它的第一层文件夹中,创建子文件夹,即可增加硬链接的数量
硬链接创建语法
ln 源文件 目标文件

硬链接特点
1.可以对已存在的文件做硬链接,该文件的硬链接数,至少是1,为0就表示文件不存在
2.硬链接的文件,inode相同,属性一致
3.只能在同一个磁盘分区下,同一个文件系统下创建硬链接
4.不能对文件夹创建硬链接,只有文件可以
5.删除一个硬链接,不影响其他相同inode号的文件
6.文件夹的硬链接,默认是2个,以及是2+(第一层子目录总数)=文件夹的硬链接数量
7.可以用任意一个硬链接作为入口,操作文件(修改的其实是block中的数据)
8.当文件的硬链接数为0时,文件真的被删除

查看分区的inode和block数量(xfs_info)

inode和block的数量,是在你mkfs创建文件系统的时候,就已经确定好了

ext4的文件系统,查看文件系统信息的命令,dumpe2fs

xfs文件系统,查看文件系统信息的命令,xfs_info

查看xfs文件系统的信息

isize表示inode的容量=512bytes(字节)

sectsz表示扇区=512bytes

bsize表示block容量:是4096bytes = 4KB

blocks = 4096*5242624 =21473787904
可见/dev/sdc1分区的总容量是 20G左右

查看某分区,有多少block让你用,(查看这个磁盘,分区还有多少容量)

df -h  # -h参数,是友好的显示容量单位,如kb ,mb,gb

查看某分区,一共有多少inode容量编号给我们用

[root@bogon ~]# df -i
Filesystem                Inodes  IUsed    IFree IUse% Mounted on
/dev/mapper/centos-root  8910848 132280  8778568    2% /
devtmpfs                  500499    429   500070    1% /dev
tmpfs                     503553      1   503552    1% /dev/shm
tmpfs                     503553   1280   502273    1% /run
tmpfs                     503553     16   503537    1% /sys/fs/cgroup
/dev/sda1                 524288    326   523962    1% /boot
tmpfs                     503553      1   503552    1% /run/user/0
/dev/sdc1               10485248      3 10485245    1% /mnt


[root@bogon ~]# df -ih
Filesystem              Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root   8.5M  130K  8.4M    2% /
devtmpfs                  489K   429  489K    1% /dev
tmpfs                     492K     1  492K    1% /dev/shm
tmpfs                     492K  1.3K  491K    1% /run
tmpfs                     492K    16  492K    1% /sys/fs/cgroup
/dev/sda1                 512K   326  512K    1% /boot
tmpfs                     492K     1  492K    1% /run/user/0
/dev/sdc1                  10M     3   10M    1% /mnt

inode的作用

df -h
查看磁盘block空间的使用情况,如果看到分区快满了,可以去删除大容量的文件


df -i 
inode存储文件属性的
当你机器上有大量的无用的小文件,空文件,白白消耗inode数量

查看磁盘分区inode空间的使用情况,如果可用的不多的,删除大量的4kb小文件即可,因为它们真用了太多的无效inode编号,应该留给别人用。

明明 df -h看到磁盘还是有空间,但是写入数据,系统提示你
no space for disk,你虽然还有block空间可以存数据
但是你的inode数量肯定是没了

touch 创建新文件,想分配inode编号,发现不够用了

raid技术的作用

raid磁盘列阵组能够提升数据冗余性,当然也增加了硬盘的价格成本,需要更多的硬盘,只不过数据本身的价值是超过硬盘购买的价格的,raid除了能够保障数据丢失造成的严重损失,还能提升硬盘的读写效率,被应用在广泛的企业中

raid0

是将两个或者两个以上相同的型号,容量的硬盘组合,磁盘阵列的总和便是多个硬盘的总和
paid的特点
至少需要两块磁盘
数据==条带化==分布到磁盘==,高的读写性能==100%==高储存的空间利用率
数据==没有冗余策略==一块磁盘故障,数据将无法恢复
应用场景:对性能要求不高但对数据安全性,和可靠性要求不高的场景,比如音频,视频储存等
由于raid 0的特性,数据一次写入到各个物理硬盘中,数据是分开放的,因此损坏任意一个磁盘都会对完整的数据破坏,对于企业来说,是不允许的

raid1

paid 1技术,是将两块以上的硬盘绑定,数据写入时,同时写入多个硬盘,因此即使有硬盘故障,也有数据备份
但是这种方式,会极大降低磁盘的利用率,假设两块磁盘一共4T,真实数据只有2T,利用率只有2T,利用率50%,如果是三块硬盘组成raid 1,利用率只有33%,也是不可取的

至少需要两块磁盘
数据==镜像备份==写到磁盘上(工作盘和镜像盘)==可靠性高,==磁盘利用率为50%
读性能可以,但是写性能不佳,写入数据要同步,因此速度很慢
一块磁盘故障,不会影响数据的读写,因为是镜像磁盘,冗余性好,只要有一块是好的,数据还是会转的
raid 1 应用场景:
对数据安全可靠要求较高的场景,比如邮件系统,交易系统等

Raid5

至少需要3块磁盘,
数据==条带化==存储在磁盘==读写性能好==磁盘利用率为(n-1)/n
一块磁盘故障,可根据其他数据块和对应的校验数据重构损坏数据(消耗性能)
校验算法是计算机二进制的异或运算
只能允许坏掉一块硬盘
是目前综合==性能最佳的数据保护解决方案
兼顾了存储性能,数据安全和存储成本等各方面因素(性价比高)
适用于大部分的应用场景

Raid6

比raid5提供的数据校验,又多了一层校验,双层校验

至少需要4块磁盘
数据==条带化==储存在磁盘,读取性能好,容错能力强
采用==双重校验==方式保证数据的安全性
如果2快磁盘同时故障,可以通过两个校验数据来重建两个磁盘的数据
成本要比其他等级高,平且更复杂
一般用于对数据安全性要求非常高的场合

raid10

raid10是raid1+raid0的组合
至少需要4快磁盘
两块硬盘为一个组,先做raid1,再将做好的raid1的两组做raid0
兼顾数据的冗余,(raid1镜像)和读写性能(raid0数据条带化)
磁盘利用率50% ,成本高
只要坏的不是同一个组中所有的硬盘,就算坏掉一半的硬盘都不会丢数据
因此raid10是最实用的方案

硬raid、软raid区别

软件控制的raid磁盘冗余阵列
由于cpu去控制硬盘驱动器进行数据转换,计算的过程就是软件raid
软raid运行==操作系统底层==将SCSI或者IDE的控制器提交上来的物理磁盘,虚拟成虚拟磁盘,再提交给管理程序来进行管理
占用内存空间
占用cpu资源
如果程序或者操作系统故障就无法运行
基于以上的缺陷,所以现在企业很少用软raid





硬件控制
由专门的raid卡上的主控芯片操控,就是硬件raid
通过用硬件来实现raid功能的就是硬raid,独立的raid卡,主板集成的raid芯片都是硬raid
raid卡就是用来实现raid功能的板卡,通常是由I/O处理器,硬盘控制器,硬盘连接器的缓存等一系列零组件构成的
不同的raid卡支持的raid功能不同,支持raid0,raid1,raid4,raid5,raid10不等

软件raid额外消耗cpu资源,性能弱
硬件raid更加稳固,软件raid可能造成磁盘发热过量,造成威胁
兼容性问题,软件raid依赖操作系统,硬件raid胜出
可见,硬件raid,比软件raid强

创建raid10

[root@bogon ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  


[root@bogon ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Fail to create md0 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@bogon ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE   MOUNTPOINT
sda               8:0    0   20G  0 disk   
├─sda1            8:1    0    1G  0 part   /boot
└─sda2            8:2    0   19G  0 part   
  ├─centos-root 253:0    0   17G  0 lvm    /
  └─centos-swap 253:1    0    2G  0 lvm    [SWAP]
sdb               8:16   0   20G  0 disk   
└─md0             9:0    0   40G  0 raid10 
sdc               8:32   0   20G  0 disk   
└─md0             9:0    0   40G  0 raid10 
sdd               8:48   0   20G  0 disk   
└─md0             9:0    0   40G  0 raid10 
sde               8:64   0   20G  0 disk   
└─md0             9:0    0   40G  0 raid10 
sr0              11:0    1  4.2G  0 rom