IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux磁盘管理 -> 正文阅读

[系统运维]Linux磁盘管理

一、磁盘介绍

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

1. 硬盘基本概念介绍:

  1. 盘片
    硬盘一般有一个或多个盘片,每个盘片可以有两面,即第一个盘片的正面为0面,反面为1面然后依次类推。

  2. 磁道
    每个盘片的盘面在出厂的时候被划分出了多个同心圆环,数据就存储在这样的同心圆环上面,我们将这样的圆环称为磁道 Track,每个盘面可以划分多个磁道。但是肉眼不可见。

  3. 扇区
    硬盘出厂时候会对磁盘进行一次低级格式化,会将每个磁道划分为多个圆弧,每个圆弧段称为扇区Sector,
    扇区是数据存储的基本物理单位,每个扇区大小512bytes。

  4. 柱面
    柱面实际上就是我们抽象出来的一个逻辑概念,简单来说就是处于同一个垂直区域的磁道称为柱面 ,即各盘面上面相同位置磁道的集合。这样数据如果存储到相同半径磁道上的同一扇区,这样可以实现并行读取,主要是减少磁头寻道时间。两个柱面之间的扇区称为一个分区。

  5. 平均寻道时间
    7200转/60s的硬盘
    120转/s
    机械手臂找到磁道大概需要5ms

  6. 平均延迟时间
    转半圈4ms 大概需要
    所以机械磁盘慢就是慢在找数据 = 平均寻道时间+平均延迟时间

  7. 磁头
    读取磁道上面的金属块,主要负责读或写入数据。

2. 磁盘的接口类型

  1. IDE
  2. SCSI
  3. SATA(个人)
  4. SAS(企业)
  5. MSATA
  6. M.2

二、linux上磁盘命名

  1. 真实物理服务器

在这里插入图片描述
在这里插入图片描述
2. 阿里云主机或者KVM虚拟化主机的磁盘命名格式
在这里插入图片描述

三、分区管理

目前常见的分区格式有两种,MBR分区和GPT分区

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 ~]# 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
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 11:14:16  更:2021-07-23 11:14:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 5:56:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码