Linux-存储管理

Linux存储管理

一. 存储概览

1.1 从磁盘的工作原理上分类磁盘

机械磁盘 HDD
固态磁盘 SSD

1.2 从插拔方式上分类磁盘

热插拔
非热插拔

1.3 从硬盘接口上分类磁盘

IDE-SATA(串行ATA)
SCSI-SAS(串行SCSI)
PCIE接口
FC光纤接口

1.4 从连接方式上分类

本地存储
外部存储
网络存储

1.5 从分区方式区分

1.5.1 MBR

在这里插入图片描述

# MBR是MSDOS;
# 兼容windows的MBR(Master boot record);
# 只能处理小于2TB的磁盘;
# 用fdisk工具分区;
# 最多只能有14个分区(4个主分区,扩展分区,逻辑分区);
# 磁盘的第一扇区,第一扇区有512bytes,存放两类数据:MBR和分区表
# MBR: 安装有开机管理程序,占446bytes
# 分区表: 记录整颗磁盘分区的状态,占64bytes
	## 由于分区表只有64bytes,所以只能最多有四组记录区(每个记录占用16bytes),每组记录区记录了该区段的起始和结束扇区号码;
	## 所以每块磁盘只能有四个分区槽;
	## 这四个分区槽是主分区Primary和扩展分区Extended;
# 每个分区的前面都有一个启动扇区,用于存放操作系统的启动程序;
# 扩展分区的前面有一个扩展分区启动记录区占用多个扇区,用于存放里面的所有逻辑分区的起止扇区号码;
# 扩展分区不能格式化,只能再分成若干个逻辑分区槽;
# 扩展分区利用多个扇区来记录逻辑分区信息,由于是用多个扇区来记录,所以支持大于4个逻辑分区;

在这里插入图片描述

逻辑分区的槽号是从5开始,1-4是保留给主分区和扩展分区的
P1:   /dev/sda1
P2:  /dev/sda2
L1:  /dev/sda5
L2:  /dev/sda6
L3:  /dev/sda7
L4:  /dev/sda8
L5:  /dev/sda9
1.5.1.1 MBR中主分区、 扩展分区、逻辑分区总结

主分区和扩展分区最多有4个;
扩展分区最多只能有1个;
逻辑分区由扩展分区生;
能被格式化后使用的分区为主分区和逻辑分区; 扩展分区不能直接使用;
逻辑分区的数量由操作系统决定。

1.5.2 GPT(GUID partition table)

# 可以处理大于或小于2TB的磁盘;
# 在CentOS6中用parted工具分区;在CentOS7中用gdisk工具分区;
# 最多只能有128个分区;没有扩展分区和逻辑分区的概念,都是主分区
# GPT将磁盘所有区块以LBA来规划;
# LBA:Logical Block Address ,预设每个LBA为512bytes,第一个LBA称为LBA0;
# GPT使用前面的34个LBA;除此之外还使用了最后的33个LBA做备份;
# GPT分区中没有主分区、扩展分区、逻辑分区的概念,每个分区都能使用;
# 磁盘管理程序中fdisk不识别GPT分区;gdisk和parted可以识别;
# grub第一版不识别GPT

在这里插入图片描述

LBA0: 与MBR兼容。这个LBA0区块也分两部分,第一部分是和MBR	相似的446bytes块区,存储了第一阶段的开机管理程序;第二部分放置了一个特殊标志的分区用来表示此块磁盘为GPT分区格式磁盘,不能识别GPT分区表的磁盘管理程序是不能修改此分区信息的
LBA1: 记录GPT分区表的表头数据,内容为:分区表本身的位置和大小;备份GPT(最后34个LBA区块)放置的位置;放置了分区表检验机制码CRC32,操作系统根据这个码来判断GPT是否正确,如果错误,从备份GPT恢复。
LBA2-33: 实际记录分区信息的地方,每个LBA可以记录4个分区槽信息,所以一共可以有128个分区槽

二. 基本分区

2.1 磁盘设备相关命令

lsblk: 查看系统中所有块设备文件

[root@localhost ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   50G  0 disk 
├─sda1          8:1    0    1G  0 part /boot
└─sda2          8:2    0   49G  0 part 
  ├─rhel-root 253:0    0   44G  0 lvm  /
  └─rhel-swap 253:1    0    5G  0 lvm  [SWAP]
sdb             8:16   0   30G  0 disk 
sr0            11:0    1  6.6G  0 rom  /media/cdrom

fdisk -l 或 gdisk -l: 查看磁盘的分区情况

[root@localhost ~]# fdisk -l /dev/sda
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x42a80f85

Device     Boot   Start       End   Sectors Size Id Type
/dev/sda1  *       2048   2099199   2097152   1G 83 Linux
/dev/sda2       2099200 104857599 102758400  49G 8e Linux LVM 

blkid:查看分区的UUID、文件系统类型

[root@localhost ~]# blkid
/dev/mapper/rhel-root: UUID="75619499-06fa-49f8-be42-2361d4d16a34" TYPE="xfs"
/dev/sda2: UUID="OuQG8H-ct9i-AXcl-9o3q-HTYB-THas-CQIbfA" TYPE="LVM2_member" PARTUUID="42a80f85-02"
/dev/sda1: UUID="fc4dfa98-1c5f-4d77-9df2-04dae5a25ad4" TYPE="xfs" PARTUUID="42a80f85-01"
/dev/sdb1: PARTUUID="789b7cc8-01"
/dev/sdb5: PARTUUID="789b7cc8-05"
/dev/sr0: UUID="2019-04-04-08-40-23-00" LABEL="RHEL-8-0-0-BaseOS-x86_64" TYPE="iso9660" PTUUID="0da1aba4" PTTYPE="dos"
/dev/mapper/rhel-swap: UUID="53373187-9792-4c44-be3a-5d12e45ae6fb" TYPE="swap"

2.2 管理基本分区的步骤

  1. 添加新磁盘设备
  2. 用MBR或GPT将磁盘分区
  3. 将各个可用分区格式化为ext3,ext4,xfs等文件系统
  4. 将格式化好的分区挂载

2.3 用fdisk工具将磁盘设备做MBR格式分区

MBR分区可分14个区(4个主分区,扩展分区,逻辑分区)
一块新磁盘的分区、格式化、挂载步骤:

  1. 分区:fdisk /dev/sdb
  2. 分完区后,要用这个命令让内核重新加载一下分区表,才能在/dev目录里找到新分区文件:partprobe /dev/sdb

2.4 用gdisk工具将磁盘设备做GPT格式分区

GPT 128个主分区

  1. 分区: gdisk /dev/sdc
  2. partprobe /dev/sdc

2.5 格式化分区后的分区

有两个命令可用:

  1. mkfs.xxx
  2. mkfs -t xxx
# mkfs.ext4 /dev/sdb1
# mkfs -t xfs /dev/sdb5

2.6 挂载

2.6.1 手动挂载

# mkdir /tmp/test1/
# mount -t ext4 -o rw /dev/sdb1 /tmp/test1/
# umount /dev/sdb1 

2.6.2 永久挂载

写入/etc/fstab
然后重新启动系统或执行mount -a加载所有/etc/fstab中的挂载
在这里插入图片描述

三. 交换分区

3.1 交换分区的作用

防止out of memory

3.2 查看交换分区

[root@localhost TestVG]# free -m
              total        used        free      shared  buff/cache   available
Mem:          15877         333       15163           9         380       15252
Swap:          5119           0        5119
[root@localhost TestVG]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	5242876	0	-2

3.3增加交换分区

可以用分区、LVM、文件来增加交换分区

3.3.1 用分区来做交换分区

  1. 创建分区
    在这里插入图片描述在这里插入图片描述

  2. 用mkswap命令格式化交换分区

[root@localhost ~]# mkswap /dev/sdd1
Setting up swapspace version 1, size = 5 GiB (5368705024 bytes)
no label, UUID=5e7526c8-92fb-448b-8c67-f80faec0fe2f
  1. 先用free -m 命令查看一下现有交换分区的容量,为5119M
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          15877         303       15259           9         314       15288
Swap:          5119           0        5119
  1. 用命令swapon激活这个新创建的交换分区,相当于把这个新的交换分区挂载到系统

这种方式在系统重启后就会失效;永久挂载的方式是写入fstab文件

[root@localhost ~]# swapon /dev/sdd1 
  1. 再次用命令free -m查看交换分区容量已经扩大到了10239M
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          15877         307       15255           9         314       15284
Swap:         10239           0       10239
  1. 永久挂载这个交换分区
    写入/etc/fstab文件
/dev/sdd1       swap    swap    defaults        0       0

3.3.2 用文件做交换分区

  1. 用dd命令创建一个文件
[root@localhost ~]# dd if=/dev/zero of=/tmp/swap.img bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0.745026 s, 721 MB/s
  1. 格式化这个文件
    [root@localhost ~]# mkswap /tmp/swap.img
    mkswap: /tmp/swap.img: insecure permissions 0644, 0600 suggested.
    Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
    no label, UUID=6110dada-05e8-4466-b32d-7f10e5c9b506
    [root@localhost ~]# chmod 0600 /tmp/swap.img

  2. 挂载

[root@localhost ~]# swapon /tmp/swap.img
[root@localhost ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	5242876	0	-2
/tmp/swap.img                          	file    	524284	0	-3

3.4 对交换分区调优

默认各个交换分区按照优先级,一个分区使用完再使用另一个分区,
可以使用相同的优先级让多个交换分区同时使用
在这里插入图片描述

[root@localhost ~]# reboot

[root@localhost ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	5242876	0	1
/tmp/swap.img                          	file    	524284	0	1

四. 逻辑卷LVM

4.1逻辑卷概览

在这里插入图片描述

1. 由单个磁盘或单个磁盘阵列raid形成一个Physical Volume(物理卷);
2. 多个PV组成一个VG(Volume Group卷组);
3. 从VG中创建一个或多个LV(Logical Volume逻辑卷);
4. PE(Physical Extents物理扩展):PE的大小可以是4M 8M 16M 32M 64M ,这个大小是在创建VG时指定的-s 8M
5. LE(Logical Volume逻辑扩展):LE会映射到PE,不一定连续,也不一定在同一块PV上

LVM的优点:

1. 在线扩容;
2. 在线数据迁移

4.2 创建LVM

4.2.1 创建PV

可以用一个raid或磁盘或分区来做成PV

 # 用整个磁盘做PV
 root@localhost ~]# pvcreate /dev/sdc
# 用分区做PV
[root@localhost ~]# pvcreate /dev/sdd2
  Physical volume "/dev/sdd2" successfully created.

4.2.2 查看PV

 [root@localhost ~]# pvscan
  PV /dev/sda2   VG rhel            lvm2 [<49.00 GiB / 0    free]
  PV /dev/sdc                       lvm2 [25.00 GiB]
  Total: 2 [<74.00 GiB] / in use: 1 [<49.00 GiB] / in no VG: 1 [25.00 GiB]

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree 
  /dev/sda2  rhel lvm2 a--  <49.00g     0 
  /dev/sdc        lvm2 ---   25.00g 25.00g

[root@localhost ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               rhel
  PV Size               <49.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              12543
  Free PE               0
  Allocated PE          12543
  PV UUID               OuQG8H-ct9i-AXcl-9o3q-HTYB-THas-CQIbfA
   
  "/dev/sdc" is a new physical volume of "25.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               25.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               q60jal-osG7-QsNe-rsIP-xM9t-RvPQ-HZv1Oq

4.2.3 创建VG

vgcreate VG名 PV名

[root@localhost ~]# vgcreate TestVG /dev/sdh1
  Volume group "TestVG" successfully created

# 用-s指定VG的PE大小
[root@localhost ~]# vgcreate -s 8m TestVG1 /dev/sdg
  Volume group "TestPV1" successfully created

4.2.4 查看VG

[root@localhost ~]# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "TestVG" using metadata type lvm2
  Found volume group "rhel" using metadata type lvm2
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  TestVG   1   0   0 wz--n- <10.00g <10.00g
  rhel     1   2   0 wz--n- <49.00g      0 
[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               TestVG
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               mWfezI-tVOS-IUaz-FWud-OouC-6fEM-zpFC74
   
  --- Volume group ---
  VG Name               rhel
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <49.00 GiB
  PE Size               4.00 MiB
  Total PE              12543
  Alloc PE / Size       12543 / <49.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               1Nhp7T-A5Rn-X4BP-MU9I-bdkN-hZtH-SfDdMb

4.2.5 创建LV

用l接LE数或用L接容量来制定LV的大小
lvcreate -l LE数 -n LV名 VG名

lvcreate -L 容量 -n LV名 VG名

lvcreate -l 50%VG -n LV名 VG名

lvcreate -l 50%Free -n LV名 VG名

[root@localhost ~]# lvcreate -L 100M  -n lv1 TestVG
  Logical volume "lv1" created.

[root@localhost ~]# lvcreate -l 50%VG -n lv3 TestVG

[root@localhost ~]# lvcreate -l 100%FREE -n lv4 TestVG
  Logical volume "lv4" created.

4.2.6 查看LV

[root@localhost ~]# lvscan
  ACTIVE            '/dev/TestVG/lv1' [100.00 MiB] inherit
  ACTIVE            '/dev/rhel/swap' [5.00 GiB] inherit
  ACTIVE            '/dev/rhel/root' [<44.00 GiB] inherit
[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  TestVG -wi-a----- 100.00m                                                    
  root rhel   -wi-ao---- <44.00g                                                    
  swap rhel   -wi-ao----   5.00g                                                    
[root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/TestVG/lv1
  LV Name                lv1
  VG Name                TestVG
  LV UUID                aqqVLM-mxSx-f2ZX-2pLq-JDpX-a3pt-SgbjG3
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-01-20 23:47:44 +0800
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/rhel/swap
  LV Name                swap
  VG Name                rhel
  LV UUID                NzwGhe-Wff9-9dN0-gc2a-B0SO-dsnv-bQC45d
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-12-25 18:18:18 +0800
  LV Status              available
  # open                 2
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
  --- Logical volume ---
  LV Path                /dev/rhel/root
  LV Name                root
  VG Name                rhel
  LV UUID                s0p5FF-LD1q-Uvxo-J6mh-2EZh-qQLF-eQKH85
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-12-25 18:18:19 +0800
  LV Status              available
  # open                 1
  LV Size                <44.00 GiB
  Current LE             11263
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

4.2.7 格式化LV并挂载

[root@localhost rhel]# mkfs.xfs /dev/TestVG/lv1
meta-data=/dev/TestVG/lv1              isize=512    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1368, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost rhel]# 
[root@localhost rhel]# mkdir /tmp/lv1
[root@localhost rhel]# vi /etc/fstab 
/dev/TestVG/lv1       /tmp/lv1        auto    defaults        0       0

[root@localhost rhel]# mount -a
[root@localhost rhel]# df
Filesystem             1K-blocks    Used Available Use% Mounted on
devtmpfs                 8113900       0   8113900   0% /dev
tmpfs                    8129256       0   8129256   0% /dev/shm
tmpfs                    8129256    9220   8120036   1% /run
tmpfs                    8129256       0   8129256   0% /sys/fs/cgroup
/dev/mapper/rhel-root   46110724 4226936  41883788  10% /
/dev/sda1                1038336  177012    861324  18% /boot
/dev/sdb5               29344772  237768  29107004   1% /tmp/test1
tmpfs                    1625848       4   1625844   1% /run/user/0
/dev/mapper/TestVG-lv1     96928    6112     90816   7% /tmp/lv1

4.3 VG管理

4.3.1 扩大VG

扩大VG的本质是把新PV加入这个VG

  1. 先建立新的PV
[root@localhost ~]# pvcreate /dev/sde
  1. 扩容VG
[root@localhost ~]# vgextend TestVG /dev/sde
  Volume group "TestVG" successfully extended

4.3.2 减小VG

减小VG的本质是把VG中的PV删除,但如果要删除的PV中有数据要把数据先迁移到同一VG中的其他PV

例如想减小TestVG这VG的容量,把/dev/sdh1这个PV从该VG中移除,发现/dev/sdh1中有数据,所以要先把/dev/sdh1中的数据迁移到/dev/sde中
在这里插入图片描述

[root@localhost ~]# pvmove /dev/sdh1
  /dev/sdh1: Moved: 20.00%
  /dev/sdh1: Moved: 100.00%

然后在把/dev/sdh1从TestVG中删除

 [root@localhost ~]# vgreduce TestVG /dev/sdh1
  Removed "/dev/sdh1" from volume group "TestVG"

4.4 LV扩容

LV扩容是先扩容LV再格式化(扩容FS)

4.4.1 LV扩容

[root@localhost ~]# lvextend -L +50m /dev/TestVG/lv1 
  Rounding size to boundary between physical extents: 52.00 MiB.
  Size of logical volume TestVG/lv1 changed from 152.00 MiB (38 extents) to 204.00 MiB (51 extents).
  Logical volume TestVG/lv1 successfully resized.

4.4.2 FS扩容

  1. xfs文件系统的lv用xfs_growfs命令格式化
    新版操作系统xfs_growfs后要接挂载点
    旧版操作系统xfs_growfs后要接文件系统
# xfs_growfs /dev/TestVG/lv1
  1. ext文件系统的lv用resize2fs命令格式化
# resize2fs /dev/TestVG/lv1

4.5 删除LV

  1. 先umount要删除的lv
[root@localhost ~]# umount /dev/mapper/TestVG-lv1 
[root@localhost ~]# 
  1. 再删除
[root@localhost ~]# lvremove /dev/TestVG/lv1
Do you really want to remove active logical volume TestVG/lv1? [y/n]: y
  Logical volume "lv1" successfully removed

4.6逻辑卷快照-snapshot

# 作为快照的分区容量可以比原始分区小;
# 快照不是拷贝,建立快照很快;
# 只有当原始数据发生变化时才把变化前的原始数据拷贝到快照里;
# 当原始数据持续变化,有可能撑破快照,快照损坏;
# 原始逻辑卷和snapshot必须在同一个VG中

4.6.1 Ext4文件系统逻辑卷创建snapshot

原始逻辑卷和snapshot必须在同一个VG中

  1. 创建snapshot
    lvcreate -L snapshot的大小 -s -n snapshot名 原始逻辑卷名
[root@localhost ~]# lvcreate -L 10M -s -n lv4-snap /dev/TestVG/lv4
  Rounding up size to full physical extent 12.00 MiB
  Logical volume "lv4-snap" created.

在这里插入图片描述2. 挂载snapshot

[root@localhost TestVG]# mount -o ro /dev/TestVG/lv4-snap /tmp/lv4-snap/

4.6.2 xfs文件系统逻辑卷创建snapshot-(xfs格式的snapshot挂载时需要加参数nouuid)

  1. 创建原始逻辑卷
    [root@localhost TestVG]# lvcreate -l 50%VG -n lv1 andy
    WARNING: xfs signature detected on /dev/andy/lv1 at offset 0. Wipe it? [y/n]: y
    Wiping xfs signature on /dev/andy/lv1.
    Logical volume “lv1” created.

  2. 用xfs文件系统格式化这个原始逻辑卷

[root@localhost TestVG]# mkfs.xfs /dev/andy/lv1
meta-data=/dev/andy/lv1          isize=512    agcount=4, agsize=392704 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1570816, 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
  1. 挂载这个原始逻辑卷
    [root@localhost TestVG]# mount /dev/andy/lv1 /tmp/lv1

  2. 创建snapshot

[root@localhost TestVG]# lvcreate -L 50m -s -n lv1-snap /dev/andy/lv1
  Rounding up size to full physical extent 56.00 MiB
  Logical volume "lv1-snap" created.
  1. 挂载这个snapshot
[root@localhost TestVG]# mount -o ro /dev/andy/lv1-snap /tmp/lv1-snap/
mount: /tmp/lv1-snap: wrong fs type, bad option, bad superblock on /dev/mapper/andy-lv1--snap, missing codepage or helper program, or other error.
[root@localhost TestVG]# mount  -o nouuid,ro /dev/andy/lv1-snap /tmp/lv1-snap/
[root@localhost TestVG]# 

五. Ext4文件系统(索引式文件系统)

5.1 概述

在这里插入图片描述

superblock:记录整个文件系统的整体信息,包括inode/block的总量、使用量、剩余量等,所有block group的superblock内容是一样的

 # 没有superblock就没有文件系统
 # block和inode总数
 # 已经使用的block和inode的数量
 # 剩余的block和inode的数量
 # block的大小(1,2,4k)
 # inode的大小(128,256b)
 

inode:记录文件的元数据,包括文件类型、权限、UID、GID、size,以及文件数据所在的block number等。每个文件都有一个inode

# 文件权限
# 文件的属主和属组
# 文件的大小
# 文件的ctime,atime,mtime
# 文件内容所在的block的number

block:实际存放文件的地方,如果文件大可有多个block

5.2 查看inode

5.2.1 查看各个文件系统的inode的总数、使用情况

[root@localhost ~]# df -i
Filesystem              Inodes  IUsed    IFree IUse% Mounted on
devtmpfs               2028475    462  2028013    1% /dev
tmpfs                  2032314      1  2032313    1% /dev/shm
tmpfs                  2032314    764  2031550    1% /run
tmpfs                  2032314     17  2032297    1% /sys/fs/cgroup
/dev/mapper/rhel-root 23066624 119325 22947299    1% /
/dev/sda1               524288    309   523979    1% /boot
tmpfs                  2032314     11  2032303    1% /run/user/0

5.2.2 查看文件的inode的inode number

在这里插入图片描述

5.3 文件夹的blcok data已经文件的文件名是存放在他的目录的block data中的

所以对文件的创建和删除要有文件夹的w权限
在这里插入图片描述

5.4 查看ext4文件系统的信息-实际上就是查看文件系统的superblock中的信息

5.4.1 dumpe2fs

[root@localhost ~]# dumpe2fs /dev/sdi1 |head
dumpe2fs 1.44.3 (10-July-2018)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          03f62d3b-aae3-4fcd-b99e-23c7868636a2
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue

5.4.2 tune2fs -l

[root@localhost ~]# tune2fs -l /dev/sdi1
tune2fs 1.44.3 (10-July-2018)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          03f62d3b-aae3-4fcd-b99e-23c7868636a2
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              983040
Block count:              3931904
Reserved block count:     196595
Free blocks:              3843564
Free inodes:              983029
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Mon Jan 25 17:27:27 2021
Last mount time:          Mon Jan 25 17:33:31 2021
Last write time:          Mon Jan 25 17:33:31 2021
Mount count:              2
Maximum mount count:      -1
Last checked:             Mon Jan 25 17:27:27 2021
Check interval:           0 (<none>)
Lifetime writes:          308 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:	          256
Required extra isize:     32
Desired extra isize:      32
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      167d7bde-8740-462a-b30f-1e646f00b0dc
Journal backup:           inode blocks
Checksum type:            crc32c
Checksum:                 0x23bf403c

5.5 ext2/ext3/ext4日志式文件系统(Journaling filesystem)

5.5.1 ext2/ext3/ext4日志式文件系统的工作原理

日志式文件系统工作的三个步骤:

  1. 准备阶段:当系统要写入一个文件时,会先在日志区记录这个文件准备写入的信息
  2. 实际写入阶段:将metadata原信息写入inode;将实际数据写入block;更新inode bitmap、block bitmap、superblock
  3. 结束阶段:完成数据和metadata的写入和inode bitmap、block bitmap、superblock的更新后,在日志记录区块中清楚这个文件的信息

在这里插入图片描述

5.5.2 新建一个文件的过程

  1. 先确定使用者对于想要创建文件的目录是否有w和x权限
  2. 根据inode bitmap找到没有使用的inode号码,并将文件的权限和属性写入
  3. 根据block bitmap没有使用的block号码,把实际数据写入,并更新inode的block指向信息
  4. 将刚刚写入的inode和block在更新inode bitmap和block bitmap,并更新superblock的内容

5.5.3 文件不一致的状态

如果断电或内核发生错误,可能刚刚写完inode和block的数据,还没来得及更新inode bitmap、block bitmap,superblock中的原数据,这就造成了元数据与实际不符的情况Inconsistent

5.5.4 修复文件不一致的状态文件系统

5.5.4.1 文件不一致的现象
  1. 系统无法启动
  2. 系统某个分区只读
5.5.4.2 修复文件不一致的命令

fsck和e2fsck-fy

5.5.5 如何利用备份的superblock修复主superblock

六. xfs文件系统

6.1 与ext4相比xfs文件系统的优势

  1. 创建文件系统(格式化)时快;
  2. 文件系统修复时快;
  3. 容量更大

6.2 xfs文件系统概述

  1. 与ext4一样都是日志式文件系统;

  2. inode和block都是系统需要要到时才动态配置生成的;

  3. xfs文件系统有三个区:
    3.1 数据区data section
    存放inode、block、superblock

    3.2 日志区log section

    3.3 实时运行区realtime section

6.3 查看xfs分区的信息

[root@localhost ~]# xfs_info /dev/mapper/andy-lv1
meta-data=/dev/mapper/andy-lv1 isize=512 agcount=4, agsize=392704 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=1570816, 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

6.4 修复xfs文件系统

[root@localhost ~]# xfs_repair /dev/mapper/andy-lv1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...

七 mount挂载命令详解

7.1 常用的挂载选项

-t 文件系统类型
	常见的文件系统类型有:ext4,xfs,vfat,nfs,cifs,iso9660,loop
	

-o 选项1,选项2...

7.1.1 如果没有指定挂载选择则使用默认值挂载

defaults:rw, suid, dev, exec, auto, nouser, async

7.1.2 常见的挂载选项

rw	读写
ro	只读
suid	支持suid
dev	支持设备文件
nodev	不支持设备文件
exec	允许执行二进制文件
noexec	不允许执行二进制文件
auto		开机时或执行mount -a时会自动挂载有auto选项的文件系统
noauto		开机时或执行mount -a时不会自动挂载有noauto选项的文件系统,需要手动执行mount挂载
async	异步写入硬盘(数据写入内存时命令就返回,不等待写到硬盘)
sync	同步写入
uquota	支持用户级磁盘配额功能
gquota	支持组级磁盘配额功能
acl	支持acl功能
remount	在线重新挂载
pri	指定优先级

7.2 用设备文件、卷标、UUID挂载

用设备名挂载 /dev/sdb1
用卷标挂载 LABEL=andy
用UUID挂载 UUID=“sdfsdfsdf”

7.3 iso文件的制作及挂载

7.3.1 将光盘制作成iso文件

[root@localhost sdi]# dd if=/dev/cdrom of=/root/cd.iso
13873152+0 records in
13873152+0 records out
7103053824 bytes (7.1 GB, 6.6 GiB) copied, 264.033 s, 26.9 MB/s

7.3.2 将文件制作成iso文件

[root@localhost ~]# genisoimage -o /root/etc.iso -r /etc/
[root@localhost ~]# file /root/etc.iso 
/root/etc.iso: ISO 9660 CD-ROM filesystem data 'CDROM'

7.3.3 将iso文件挂载使用

[root@localhost ~]# mount /root/cd.iso /mnt/iso/
mount: /mnt/iso: WARNING: device write-protected, mounted read-only.
[root@localhost ~]# mount |grep "cd.iso"
/root/cd.iso on /mnt/iso type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)

八. 磁盘容量配额

8.1 概述

1. 可以针对用户或用户组来设置磁盘容量配额;
2. 可以限制最大磁盘使用空间或最大文件个数;
3. 只能针对整个文件系统来设置磁盘容量配额;
4. 限制方式有软限制和硬限制两种;
5. RH8默认已经安装了quote服务;但存储设备默认没有开启对quote的支持,需要手动编辑配置文件/etc/fstab,让启动目录/boot能够支持quote技术

8.2 为用户设置磁盘配额

  1. 编辑fstab文件,给/boot加上参数uquota
    在这里插入图片描述
  2. 重启reboot
  3. 查看/boot目录已经支持磁盘配额管理
[root@localhost ~]# mount |grep "/boot"
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)
  1. 让要使用磁盘配额的用户对/boot目录有写权限
[root@localhost ~]# chmod -R o+w /boot
  1. XFS文件系统的磁盘配额设置工具xfs_quota
    bsoft:是最大使用磁盘的软设置,是通过限制文件的block块大小实现的
    bhard:是最大使用磁盘的硬设置
    isoft:是最大文件数量的软设置
    ihard:是最大文件数量的硬设置,是通过限制文件的inode个数实现的
[root@localhost ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=4 ihard=7 andy' /boot/
[root@localhost ~]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
                               Blocks                     
User ID          Used       Soft       Hard    Warn/Grace     
---------- -------------------------------------------------- 
root           132316          0          0     00 [--------]
andy                0       3072       6144     00 [--------]

8.3 用命令edquota来修改磁盘配额

参数 	作用
-u 	对那位用户进行设置
-g 	对那个用户组进行设置
-p 	复制原有的规则到新的用户/组
-t 	限制宽限期限
[root@localhost ~]# edquota -u andy

九. 文件链接

9.1 符号链接

[root@localhost ~]# ln -s soft.txt soft1.txt

符号链接的链接数不会增加
在这里插入图片描述符号链接的inode不同
在这里插入图片描述

9.2 硬链接

# 不能跨文件系统(分区)做硬链接
# 不能给文件夹做硬链接

[root@localhost ~]# ln hard.txt hard1.txt

硬链接的链接数会增加
在这里插入图片描述
硬链接都是同一个文件,因为inode一样
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值