Linux磁盘管理

一、磁盘介绍

每个硬盘中心都是一摞高速运转的圆盘,在圆盘上附着的一圈金属颗粒,每个金属颗粒都有自己的磁化程度,主要用于储存0和1(高低电平)。在数据写入时,硬盘的磁头开始通电,周围会产生磁场,数据在磁场的作用下转变成电流,使磁盘的金属颗粒磁化,从而将信息记录在圆盘上。由海量颗粒组成的信息,就是我们存在硬盘里的数据。

1. 硬盘基本概念介绍:

机械磁盘

  1. 盘片
    硬盘一般有一个或多个盘片,每个盘片可以有两面,即第一个盘片的正面为0面,反面为1面然后依次类推。
  2. 磁道
    每个盘片的盘面在出厂的时候被划分出了多个同心圆环,数据就存储在这样的同心圆环上面,我们将这样的圆环称为磁道 Track,每个盘面可以划分多个磁道。但是肉眼不可见。
  3. 扇区
    硬盘出厂时候会对磁盘进行一次低级格式化,会将每个磁道划分为多个圆弧,每个圆弧段称为扇区Sector,
    扇区是数据存储的基本物理单位,每个扇区大小512bytes。
  4. 柱面
    柱面实际上就是我们抽象出来的一个逻辑概念,简单来说就是处于同一个垂直区域的磁道称为柱面 ,即各盘面上面相同位置磁道的集合。这样数据如果存储到相同半径磁道上的同一扇区,这样可以实现并行取,主要是减少磁头寻道时间。两个柱面之间的扇区称为一个分区。
  5. 平均寻道时间
    机械手臂找到正确磁道大概需要5ms
  6. 平均延迟时间
    7200转/60s的硬盘
    120转/s
    转半圈需要大概4ms才找到数据
    所以机械磁盘慢就是慢在找数据 = 平均寻道时间+平均延迟时间
  7. 磁头
    读取磁道上面的金属块,主要负责读或写入数据。

机械硬盘

靠电子,不存在转速问题,价格相对昂贵

硬盘的最小读写单位是一个扇区 512Byte, 操作系统读写的最小单位是一个block 块,即8个扇区的大小(4kb),但是操作系统有buffer/cache的机制

2. 磁盘的接口类型

  1. IDE(并行接口)
  2. SCSI(小型机)
  3. SATA(串口,个人使用多)
  4. SAS(企业)(SATA+SCSI)
  5. 光纤通道
  6. MSATA
  7. M.2

二、linux上磁盘命名

  1. 真实物理服务器

在这里插入图片描述

  1. 阿里云主机或者KVM虚拟化主机的磁盘命名格式
# 三、分区管理 目前常见的分区格式有两种,MBR分区和GPT分区 ```javascript MBR 分区,MBR 的意思是 "主引导记录"。MBR 最大支持 2TB 容量,在容量方面存在着极大的瓶颈。 GPT 分区,GPT 意为 GUID 分区表,它支持的磁盘容量比 MBR 大得多。这是一个正逐渐取代 MBR 的新标准, 它是由 UEFI 辅助而形成的,将来 UEFI 用于取代老旧的 BIOS,而 GPT 则取代老旧的 MBR。 ``` 磁盘分区工具:
fdisk工具用于 MBR格式
gdis工具用于 GPT格式

分区主要是便于数据分门别类的存储,主要有MBR和GPT两种方式。
分区表:记录分区的编号,每个分区从哪个扇区开始到哪个扇区结束等。

  • MBR:主引导记录,用来找到磁盘上的操作系统并且引导启动(硬盘上0磁道,1扇区,512 bytes)
    • 前446字节 boot loader , 主引导加载程序(grub菜单为一种boot loader)
    • 后64字节:存储分区表,每16字节表示一个分区,最多四个“主分区”(主分区+扩展分区)
    • 后2字节表示结束位。
  • GPT:新型的分区表 GPT 支持分配128个主分区
    MBR与GPT的区别

1.MBR分区

Master Boot Record,主引导记录
磁盘的每块扇区都被分配了一个逻辑块地址,引导扇区是每个分区的第一扇区,主引导扇区是整个硬盘的第一扇区。

MBR就保存在主引导扇区中,且扇区还保存了硬盘分区表DPT(Disk Partition Table),和结束标志字(Magic number)。扇区总计512字节,MBR占446字节(0000H - 01BDH),DPT占据64个字节(01BEH - 01FDH),最后的magic number占2字节(01FEH – 01FFH)。
mbr分区主要有三类
主分区<--------扩展分区<--------逻辑分区

1.逻辑分区属于扩展分区,扩展分区属于主分区
2.主分区又叫引导分区,是可以安装系统的分区

3.1查看分区信息

1.
fdisk -l  #

2.
[root@localhost boot]# 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 
  ├─centos-root 253:0    0   47G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   50G  0 disk 
├─sdb1            8:17   0   10G  0 part /mnt
├─sdb2            8:18   0   10G  0 part 
├─sdb3            8:19   0   10G  0 part 
├─sdb4            8:20   0  512B  0 part 
├─sdb5            8:21   0    5G  0 part 
├─sdb6            8:22   0    5G  0 part 
└─sdb7            8:23   0   10G  0 part 
sdc               8:32   0  3.9T  0 disk 
sr0              11:0    1  4.4G  0 rom  
[root@localhost boot]# 

3. 查看指定磁盘
[root@localhost boot]# lsblk /dev/sdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0   50G  0 disk 
├─sdb1   8:17   0   10G  0 part /mnt
├─sdb2   8:18   0   10G  0 part 
├─sdb3   8:19   0   10G  0 part 
├─sdb4   8:20   0  512B  0 part 
├─sdb5   8:21   0    5G  0 part 
├─sdb6   8:22   0    5G  0 part 
└─sdb7   8:23   0   10G  0 part 
[root@localhost boot]# 
fdisk -l    # 表示显示所有磁盘信息 
fdisk -l /dev/sda # 只显示指定的磁盘信息
[root@localhost dev]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x61d8d1fa.

Command (m for help): m
Command action
   a   toggle a bootable flag             # 切换分区启动标记
   b   edit bsd disklabel                 # 编辑 bsd磁盘标签
   c   toggle the dos compatibility flag  # 切换dos兼容模式
   d   delete a partition                 # 删除分区
   g   create a new empty GPT partition table # 创建一个新的空GPT分区表
   G   create an IRIX (SGI) partition table   # 创建一个 IIRIX 分区表
   l   list known partition types   # 显示分区类型
   m   print this menu         # 显示帮助菜单
   n   add a new partition     # 新建分区
   o   create a new empty DOS partition table  #创建新的空白分区表
   p   print the partition table            #显示分区表的信息
   q   quit without saving changes           # 不保存退出
   s   create a new empty Sun disklabel     # 创建新的sun磁盘标签
   t   change a partition's system id      # 修改分区ID,可以通过l查看id
   u   change display/entry units            # 修改容量单位,磁柱或扇区 
   v   verify the partition table        # 检验分区表
   w   write table to disk and exit     # 保存退出
   x   extra functionality (experts only)  # 拓展功能

Command (m for help): 
优先掌握:
n
p
d  # 删除一个已有的分区,保存退出后需要执行partprobe命令刷新一下分区表
w

3.2 fdisk创建分区具体步骤

[root@localhost ~]# lsblk /dev/sdb     # 先查看分区情况
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  50G  0 disk 
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n # 创建新分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p   # 选择主分区
Partition number (1-4, default 1):  # 选择默认
First sector (2048-104857599, default 2048):  # 选择默认
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): +1G  # 设置分区大小为1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): n  # 重复上述步骤
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 
First sector (2099200-104857599, default 2099200): 
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-104857599, default 104857599): +1G
Partition 2 of type Linux and of size 1 GiB is set

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3): 
First sector (4196352-104857599, default 4196352): 
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-104857599, default 104857599): +1G
Partition 3 of type Linux and of size 1 GiB is set

Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): p
Selected partition 4
First sector (6293504-104857599, default 6293504): 
Using default value 6293504
Last sector, +sectors or +size{K,M,G} (6293504-104857599, default 104857599): +1G
Partition 4 of type Linux and of size 1 GiB is set

Command (m for help): n       # 已经创建了4个主分区,如果还要分区,系统提示必须要把一个主分区替换成扩展分区
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.

Command (m for help): p

Disk /dev/sdb: 53.7 GB, 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
Disk label type: dos
Disk identifier: 0x610f4a3b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504     8390655     1048576   83  Linux

Command (m for help): d  # 删除一个主分区

partition number (1-4, default 4): 4
Partition 4 is deleted

Command (m for help): n   # 创建分区
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e  # 选择扩展分区
Selected partition 4
First sector (6293504-104857599, default 6293504):    # 默认即可
Using default value 6293504
Last sector, +sectors or +size{K,M,G} (6293504-104857599, default 104857599): # 默认即可
Using default value 104857599
Partition 4 of type Extended and of size 47 GiB is set

Command (m for help): w                    # 保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@localhost ~]# lsblk /dev/sdb  # 查看分区
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  50G  0 disk 
├─sdb1   8:17   0   1G  0 part 
├─sdb2   8:18   0   1G  0 part 
├─sdb3   8:19   0   1G  0 part 
└─sdb4   8:20   0   1K  0 part 
[root@localhost ~]# 
注:sdb4显示1k是正常的,因为它只是扩展分区,需要在它上面建立逻辑分区

有时候使用fdisk命令对磁盘分区后,内核找不到新分区,得重启机器才能识别新分区,使用partprobe可以不重启重读新的分区表。

[root@localhost ~]# partprobe   /dev/sdb          #重读磁盘分区表

3.3 格式化制作文件系统mkfs

mkfs命令用于格式化硬盘,
-b 设定数据区块占用空间大小,目前支持 1024、2048、4096 bytes每个块;
-t 用来指定什么类型的文件系统,可以是 ext4、xfs;
提示:

- 1.分区工具,可以针对整块磁盘,或者单个分区进行格式化操作
- 2.一般情况下建议,不要直接格式化使用整磁盘,要分区后再格式化,头部有预留空间;
[root@localhost ~]# mkfs.xfs /dev/sdb   # dev/sdb整体就是一个分区,如果分区完成,
应该分别对每个分区执行此命令,否则,执行此命令会抹去之前的分区,变成一个文件系统。

[root@localhost boot]# mkfs.xfs /dev/sdb1  # 格式化磁盘的某个分区
centos7选择xfs格式作为默认文件系统,而且不再使用以前的ext,仍然支持ext4,xfs专为大数据产生,
每个单个文件系统最大可以支持8eb,单个文件可以支持16tb,不仅数据量大,
而且扩展性高。还可以通过xfsdump,xfsrestore来备份和恢复

3.4 挂载管理

当需要使用磁盘空间或分区空间时,需要准备一个目录作为挂载点,然后使用 mount 命令与该设备进行关联,该目录实际上是该磁盘或分区的入口。

  1. 临时挂载
    通过mount进行挂载,但重启将会失效。我们称为临时生效。
    -t 指定文件系统挂载分区
    -a 检查并且挂载 /etc/fstab 配置文件中未挂载的设备
    -o:指定挂载参数,ro、rw等

1.挂载

[root@localhost boot]# mkdir /sdb1
[root@localhost boot]# mount -t xfs /dev/sdb1 /sdb1
[root@localhost boot]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   485824       0    485824   0% /dev
tmpfs                      497836       0    497836   0% /dev/shm
tmpfs                      497836    7708    490128   2% /run
tmpfs                      497836       0    497836   0% /sys/fs/cgroup
/dev/mapper/centos-root  49250820 5569660  43681160  12% /
/dev/sda1                 1038336  140320    898016  14% /boot
tmpfs                       99568       0     99568   0% /run/user/0
/dev/sdb1                10475520   32992  10442528   1% /sdb1
[root@localhost boot]# 

2.挂载磁盘设备,设置参数为仅可读

[root@localhost boot]# mkdir /sdb2
[root@localhost boot]# mount -t xfs -o ro /dev/sdb2 /sdb2
[root@localhost boot]# cd /sdb2
[root@localhost sdb2]# touch a.txt
touch: cannot touch ‘a.txt’: Read-only file system
[root@localhost sdb2]# 

  1. 卸载umount
    -l 强制卸载
[root@localhost sdb2]# umount /dev/sdb1  # 可以直接写设备路径
[root@localhost sdb2]# umount /sdb2      # 也可以写挂载的入口目录

umount: /sdb2: target is busy.  
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
# 提示繁忙是因为我们现在恰巧在该目录下,可以-l强制卸载或者切换到其他目录在卸载
[root@localhost sdb2]# umount /sdb2 -l

  1. 永久挂载
    如果需要实现永久挂载,则需要将挂载相关信息写入/etc/fstab配置文件中实现。
    配置文件格式:
    指定挂载的设备名称或UUID | 挂载入口目录 | 文件系统类型 | 挂载参数 | 是否备份 | 是否检查
# 可以用vim编辑此文件,也可以用sed命令
方式1. [root@localhost ~]# sed -i '$a /dev/sdb1 /opt xfs defaults 0 0' /etc/fstab 
[root@localhost ~]# tail -1 /etc/fstab 
/dev/sdb1 /opt xfs defaults 0 0

方式2. 或者先查看磁盘的UUID
[root@localhost ~]# blkid
/dev/sr0: UUID="2020-11-04-11-36-43-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda1: UUID="175215d5-3afd-4d9e-9e01-cc540fb1e37c" TYPE="xfs" 
/dev/sda2: UUID="j4YEDh-c1m9-wjfU-38Dg-FDnh-yk3X-7hSjOc" TYPE="LVM2_member" 
/dev/sdb1: UUID="8eaeb309-4b30-47ed-8526-bccf8a752bd7" TYPE="xfs" 
/dev/sdb2: UUID="ae6475e9-09ea-4c0d-a02e-50ebf53a1f19" TYPE="xfs" 
/dev/sdb3: UUID="425c34c2-73a9-4479-ae44-a480608fbd66" TYPE="xfs" 
/dev/mapper/centos-root: UUID="6154543d-a3b5-42f0-8745-6f46ab850066" TYPE="xfs" 
[root@localhost ~]#  也可以 blkid | grep 'sdb1'
将对应的UUID写入/etc/fstab 末尾
[root@localhost ~]# sed -i '$a UUID=8eaeb309-4b30-47ed-8526-bccf8a752bd7 /mnt xfs defaults 0 0' /etc/fstab 
[root@localhost ~]# tail -1 /etc/fstab
UUID=8eaeb309-4b30-47ed-8526-bccf8a752bd7 /mnt xfs defaults 0 0



方式3. 自动实现
[root@localhost /]# blkid |grep /dev/sda1 | awk -F '[: ]+' '{print $2}' | sed -r 's#(.*)#\1 /db1 xfs defaults 0 0#g' >> /etc/fstab

4.
[root@localhost ~]# reboot # 重启查看是否挂载
[root@localhost ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  475M     0  475M   0% /dev
tmpfs                   tmpfs     487M     0  487M   0% /dev/shm
tmpfs                   tmpfs     487M  7.5M  479M   2% /run
tmpfs                   tmpfs     487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        30G  2.8G   27G  10% /
/dev/sdb1               xfs       509M  162M  348M  32% /mnt
tmpfs                   tmpfs      98M     0   98M   0% /run/user/0
[root@localhost ~]#

5. 或者不用重启,直接执行命令 mount -a 系统会重新加载 /etc/fstab 配置文件
补充命令 partprobe 更新分区表信息
  1. 配置文件/etc/fstab 详解

     第一列:指定需要挂载的设备
     设备名称 /dev/sdb1
     或者设备UUID (blkid命令查看)
     
     第二列:挂载的目录入口
     例如 /mnt
     
     第三列:文件系统类型
     ext4 xfs等
     
     第四列:挂载参数
     1.async/sync:使用同步或异步方式存储数据;默认 async
     2.user/nouser:是否允许普通用户使用mount命令挂载。默认nouser
     3.exec/noexe:是否允许可执行文件执行。默认exec
     4.suid/nosuid:是否允许存在suid属性的文件。默认suid
     5.auto/noauto:执行 mount -a 命令时,此文件系统是否被主动挂载。默认auto
     6.rw/ro:是否以只读或者读写模式进行挂载。默认rw
     7.defaults:具有rw,suid,dev,exec,auto,nouser,async,rw等参数;
     
     第五列:是否需要备份磁盘
     0:不备份
     1.每天进行备份操作
     2.不定期进行备份
     第六列:开机是否检验扇区
     0:不检验
     1:检验
     2:校验(当1级别检验完之后进行2级别检验)
    

四、GPT分区

Globally Unique Identifier Partition Table 也叫做GUID分区表
大致和mbr分区一致。

[root@localhost ~]# yum install gdisk -y
[root@localhost ~]# gdisk /dev/sdd  # 创建gdisk分区
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.



Command (? for help): n  # 新建
Partition number (1-128, default 1):  # 直接回车,默认分区号为1
First sector (34-5242879966, default = 2048) or {+-}size{KMGTP}: #直接回车,使用默认的起始位置
Last sector (2048-5242879966, default = 5242879966) or {+-}size{KMGTP}: +1G # 设定1G的空间
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L  # 列出所有文件系统
......会看到一系列文件系统信息,默认的8300编号代表Linux filesystem,用它就好
Hex code or GUID (L to show codes, Enter = 8300):  # 直接回车用默认8300就好
Changed type of partition to 'Linux filesystem'Command (? for help): p  # 打印查看
......
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         2099199   1024.0 MiB  8300  Linux filesystem
​
Command (? for help): w  # 保存
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
​
Do you want to proceed? (Y/N): y  # 输入y保存
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.

五、 修复服务器文件系统

在Linux系统中,为了增加系统性能,通常系统会将一些写入数据先放在内存中,并不会直接将数据写入硬盘,这是因为内存速度要比硬盘快若干倍。
但是有个问题,万一公司服务器突然断电或者其他未知原因,再次启动后,会造成文件系统错误:“emergency mode”

welcome to emergency mode!after logging in ,type “journalctl -xb” to view system logs,
“systemctl reboot” to reboot ,“systemctl default” to try again to boot into default mode。
give root password for maintenance

执行任何命令都会有以下(或相似)错误

Error getting authority: Error initializing authority: 
Could not connect: No such file or directory (g-io-error-quark, 1)

查看运行日志,可以提示出损坏的文件系统

journalctl -xb

修复方式:

# 0、如果进入不了操作系统,可以进入单用户模式下操作
​
# 1、首先尝试mount和umount文件系统,以便重放日志,修复文件系统,如果不行,再进行如下操作。
​
# 2、执行xfs_repair -n,只检查不修复:检查文件系统是否损坏,如何损坏会列出将要执行的操作
[root@localhost ~]# xfs_repair -n /dev/sdb2
如果是日志和数据不一致了,xfs 默认会在挂载的时候修复这种不一致,操作系统给出的建议是以读写的方式挂载并自动修复,
可以尝试以只读不修复方式挂载文件系统。
[root@localhost ~]# mount -o ro,norecovery /dev/sdb2 /opt
​
# 3、如果上述挂载不成功,可以执行xfs_repair修复文件系统
[root@localhost ~]# xfs_repair /dev/sdb2 
​
# 4、如果还不行,那最后方法只能采用"损失部分数据的修复方法"
根据打印消息,修复失败时:
先执行xfs_repair -L /dev/sdb2(清空日志,会丢失文件)
再执行xfs_repair /dev/sdb2
​
说明:-L是修复xfs文件系统的最后手段,慎重选择,它会清空日志,会丢失用户数据和文件。
备注:在执行xfs_repair操作前,最好使用xfs_metadump工具保存元数据,一旦修复失败,最起码可以恢复到修复之前的状态。
​
# 5、修复完成以后,尝试能不能正常挂载 ,如能,取消挂载,再启动就正常了

示例

# 1、准备一个1G的文件系统与数据
[root@localhost ~]# mount /dev/sdb1 /opt/
[root@localhost ~]# echo big_egon > /opt/1.txt
​
# 2、模拟文件系统损坏
[root@localhost ~]# dd if=/dev/zero of=/dev/sdb bs=500M count=1  # 直接干/dev/sdb而不是sdb1
记录了1+0 的读入
记录了1+0 的写出
524288000字节(524 MB)已复制,1.09433 秒,479 MB/[root@localhost ~]# # 此时看似一切都正常
[root@localhost ~]# cat /opt/1.txt 
big_egon
[root@localhost ~]# echo egon_nb > /opt/2.txt
[root@localhost ~]# cat /opt/2.txt 
egon_nb
[root@localhost ~]# # 但是重新挂载就会失效,即断电后系统重启,重新挂载不成功
​
[root@localhost ~]# umount /opt 
[root@localhost ~]# mount /dev/sdb1 /opt
mount: /dev/sdb1 写保护,将以只读方式挂载
mount: 未知的文件系统类型“(null)”
​
# 3、修复
[root@localhost ~]# xfs_repair /dev/sdb1
Phase 1 - find and verify superblock...
bad primary superblock - bad magic number !!!
。。。。。。
修复失败,无法挂载
[root@localhost ~]# mount /dev/sdb1 /opt/
mount:/dev/sdb1 挂载到 /opt 失败: 结构需要清理
​
[root@localhost ~]# xfs_repair -L /dev/sdb1  # 强制修复
[root@localhost ~]# mount /dev/sdb1 /opt/
[root@localhost ~]# ls /opt/  # 数据丢失,所以此时修复的意义在于可用,至于数据,你需要自己有备份意识
[root@localhost ~]# 

ps:如果是ext文件系统,修复需要用fsck命令

fsck -f -y /dev/sda1 
​
-y 对所有问题都回答 "yes"
-f 即使文件系统标记为 clean 也强制进行检查

六、 xfs文件系统备份与恢复

命令与软件包

[root@localhost ~]# rpm -qf `which xfsdump`
xfsdump-3.1.7-1.el7.x86_64
[root@localhost ~]# rpm -qf `which xfsrestore`
xfsdump-3.1.7-1.el7.x86_64

xfsdump的备份级别有以下两种,默认为0(即完全备份)

0                       完全备份
​
1    <=   level <= 9    增量备份:
​
# ps:增量备份是和第一次的备份(level 0)进行比较,仅备份有差异的文件(level 1

xfsdump常用参数

-L:xfsdump会记录每次备份的session Label,这里可以填写针对此文件系统的简易说明;
-M:xfsdump可以记录存储Media Label,这里可以填写此媒体的简易说明。
-l:是L的小写,就是指定level,有0~910个等级,默认为0,即完整备份。
-f:后面接产生的文件和destination file 。例如/dev/st0设备文件名或其他一般文件文件名
-I:大写的“i”,从/var/lib/xfsdump/inventory 列出目前备份的信息状态

xfsdump使用限制

1.必须用root权限
2.只能备份已挂载的文件系统
3.只能备份XFS文件系统
4.只能用xfsrestore解释
5.透过文件系统的UUID来分辨备份档,因此不能备份相同UUID的文件系统

xfsdump备份与xfsrestore恢复

# 1、数据备份
# 1.1 先做全量备份,切记“备份的源路径”末尾不要加左斜杠/
xfsdump -l 0 -L sdb3_bak -M sdb3_bak -f 全量备份的成果路径1 备份的源路径 
​
# 1.2 再做增量备份、
xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f 增量备份的成果路径2 备份的源路径(可以是目录也可以是挂载的盘 例如/boot 或者/dev/sda1) 
xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f 增量备份的成果路径3 备份的源路径 
xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f 增量备份的成果路径4 备份的源路径 
​
# 2、数据恢复
# 2.1、先恢复全量备份
xfsrestore -f 全量备份的成果路径1 数据恢复的路径
# 2.2、再依次恢复增量
xfsrestore -f 增量备份的成果路径2 数据恢复的路径
xfsrestore -f 增量备份的成果路径2 数据恢复的路径
xfsrestore -f 增量备份的成果路径2 数据恢复的路径

示例:
数据备份

# 1、准备一个分区并制作好xfs文件系统,挂载好后给它加一点初始数据
[root@localhost ~]# df
文件系统         1K-块    已用    可用 已用% 挂载点
。。。。。。
/dev/sdb3      1038336   76836  961500    8% /opt
[root@localhost ~]# cp -r /etc/ /opt/
[root@localhost ~]# echo 111 > /opt/1.txt
[root@localhost ~]# ls /opt/
1.txt  etc
[root@localhost ~]# 
​
# 2、先做全量备份
[root@localhost ~]# xfsdump -l 0 -L sdb3_bak -M sdb3_bak -f /all.bak /opt
​
# 3、往/opt下新增文件2.txt,然后作增量备份
[root@localhost ~]# echo 222 > /opt/2.txt
[root@localhost ~]# xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f /add.bak1 /opt
​
​
# 4、往/opt下新增文件3.txt,然后作增量备份
[root@localhost ~]# echo 333 > /opt/3.txt
[root@localhost ~]# xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f /add.bak2 /opt
​
# 5、查看一下备份文件大小
[root@localhost ~]# du -sh /opt/
41M /opt/[root@localhost ~]# ll -h /all.bak   # 全量备份大小
-rw-r--r--. 1 root root 37M 114 18:44 /all.bak
[root@localhost ~]# ll -h /add.bak1  # 增量备份大小
-rw-r--r--. 1 root root 22K 114 18:45 /add.bak1
[root@localhost ~]# ll -h /add.bak2  # 增量备份大小
-rw-r--r--. 1 root root 23K 114 18:46 /add.bak2

数据恢复:

[root@localhost ~]# rm -rf /opt/`*` 
[root@localhost ~]# xfsrestore -f /all.bak /opt/  # 先恢复全量
......
[root@localhost ~]# ls /opt/
1.txt  etc
[root@localhost ~]# xfsrestore -f /add.bak1 /opt/  # 再恢复增量1
[root@localhost ~]# ls /opt/
1.txt  2.txt  etc
[root@localhost ~]# xfsrestore -f /add.bak2 /opt/  # 再恢复增量2
[root@localhost ~]# ls /opt/
1.txt  2.txt  3.txt  etc
  • 23
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值