zoukankan      html  css  js  c++  java
  • 🍖磁盘管理

    一.磁盘在系统上的命名

    1.设备名称

    设备名称 分区名称 分区类型
    /dev/sda /dev/sda1 第一块物理磁盘第一分区
    /dev/sdb /dev/sdb3 第二块物理磁盘第三分区
    ...... ....... .......

    2.分区分类

    • 磁盘分区类型分为: p主分区, e扩展分区, l逻辑分区

    • 逻辑分区属于扩展分区, 扩展分区属于主分区

    • 主分区又叫做引导分区

    二.两种分区格式

    1.mbr分区格式

    • 最多可分4个主分区
    • 通常用于小于2T的硬盘空间
    • 分区工具: fdiak

    2.gpt分区格式

    • 最多可分128个主分区
    • 通常用于大于2T的硬盘空间
    • 分区工具: gdisk

    三.制做磁盘分区的通用流程

    1. 插一块硬盘

    2. 小于2T空间用mbr分区格式, 大于2T推荐用gpt分区格式

    3. 设置分区类型和大小保存设置

    4. 为每个分区制作文件系统(格式化):mkfs.xfs

    5. 为每个分区关联挂载点:mount

    四.制作磁盘分区 fdisk

    1.先给虚拟机添加一块小于2T的磁盘

    使用命令查看磁盘是否存在
    # lsblk
    # ll /dev/sd   +   双击 Tab 键
    

    2.使用fdisk工具进行分区

    选择要分区的磁盘设备 "/dev/sdb"
    [root@shawn ~]#fdisk /dev/sdb
    

    输入"m"获取帮助信息
    常用命令操作
    "n"  :  #新建分区
    "d"  :  #删除分区
    "l"  :  #显示分区类型
    "m"  :  #帮助菜单
    "p"  :  #显示分区表信息
    "q"  :  #不保存退出
    "w"  :  #保存退出
    

    3.开始创建三种分区

    • 主分区创建
    创建一个主分区
    命令(输入 m 获取帮助):n     #新建分区
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)  #三种分区类型
       e   extended
    Select (default p): p      #选择你想要的分区类型(逻辑分区需要先有扩展分区)
    分区号 (1-4,默认 1):1     #设定分区号
    起始 扇区 (2048-4194303,默认为 2048):    #设置扇区开始位置(正常默认就行)
    将使用默认值 2048
    Last 扇区, +扇区 or +size{K,M,G} (2048-4194303,默认为 4194303):+500M  #大小
    分区 1 已设置为 Linux 类型,大小设为 500 MiB    #设置成功
    
    • 扩展分区创建
    创建一个扩展分区
    命令(输入 m 获取帮助):n     #新建
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): e      #选择扩展分区
    分区号 (2-4,默认 2):      #分区号
    起始 扇区 (1026048-4194303,默认为 1026048):   #默认起始位置
    将使用默认值 1026048
    Last 扇区, +扇区 or +size{K,M,G} (1026048-4194303,默认为 4194303):#都给扩展分区
    将使用默认值 4194303
    分区 2 已设置为 Extended 类型,大小设为 1.5 GiB    #设置成功
    
    • 新建逻辑分区
    创建一个逻辑分区
    命令(输入 m 获取帮助):n    #新建
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l     #创建逻辑分区
    添加逻辑分区 5
    起始 扇区 (1028096-4194303,默认为 1028096):  #默认起始
    将使用默认值 1028096
    Last 扇区, +扇区 or +size{K,M,G} (1028096-4194303,默认为 4194303):+500M  #分配空间
    分区 5 已设置为 Linux 类型,大小设为 500 MiB   #设置成功
    

    4.创建完成后查看一下保存退出

    先使用"p"命令查看一下
    命令(输入 m 获取帮助):p   #查看
       设备 Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048     1026047      512000   83  Linux      #主分区
    /dev/sdb2         1026048     4194303     1584128    5  Extended   #扩展分区
    /dev/sdb5         1028096     2052095      512000   83  Linux      #逻辑分区
    
    使用"w"命令保存退出
    命令(输入 m 获取帮助):w   #保存退出
    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    正在同步磁盘。
    

    5.保存退出后再查看一下磁盘设备

    查看
    # lsblk
    # ll /dev/sd   +   双击 Tab 键
    如果没有显示出来就使用"partprobe"命令刷新一下内核(经常使用的命令)
    # partprobe
    
    查看磁盘分区类型
    [root@shawn ~]#fdisk /dev/sdb -l | grep "类型"
    磁盘标签类型:dos    #dos就是mbr分区类型
    

    6.制作文件系统(格式化磁盘分区)

    "mkfs. + 双击 Tab 键"查看一下可以做哪些文件系统
    [root@shawn ~]#mkfs.
    mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.xfs     
    mkfs.cramfs  mkfs.ext3    mkfs.minix  
    
    也可以对单个磁盘分区进行格式化
    [root@shawn ~]#mkfs.xfs /dev/sdb1
    
    格式化整个磁盘
    [root@shawn ~]#mkfs.xfs /dev/sdb
    
    如果不成功,可加入"-f"选项进行强制
    [root@shawn ~]#mkfs.xfs -f /dev/sdb
    

    7.使用"mount"进行挂载

    创建一个文件夹
    [root@shawn ~]#mkdir /test1
    
    进行挂载并查看
    [root@shawn ~]#mount /dev/sdb1 /test1/
    [root@shawn ~]df -h
    

    五.制作磁盘分区 gdisk

    1.先给虚拟机添加一块大于2T的磁盘

    使用命令查看磁盘是否存在
    # lsblk
    # ll /dev/sd   +   双击 Tab 键
    

    2.使用gdisk工具进行分区

    选择要分区的磁盘设备 "/dev/sdc"
    [root@shawn ~]#gdisk /dev/sdc
    

    3.开始创建分区

    • 分区创建,与fdisk步骤相同
    创建一个主分区,可创128个
    Command (? for help): n   #创建分区
    Partition number (1-128, default 1):    #分区号
    First sector (34-6291455966, default = 2048) or {+-}size{KMGTP}:  #默认起始位置
    Last sector (2048-6291455966, default = 6291455966) or {+-}size{KMGTP}: +500M  #设置大小
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300): 8300  #选择类型(默认就行)
    Changed type of partition to 'Linux filesystem'
    

    4.创建完成后查看一下保存退出

    先使用"p"命令查看一下
    Command (? for help): p   #查看
    Number  Start (sector)    End (sector)  Size       Code  Name
       1            2048         1026047   500.0 MiB   8300  Linux filesystem
    
    使用"w"命令保存退出
    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.  #创建成功
    

    5.保存退出后再查看一下磁盘设备

    查看
    # lsblk
    # ll /dev/sd   +   双击 Tab 键
    如果没有显示出来就使用"partprobe"命令刷新一下内核(经常使用的命令)
    # partprobe
    
    查看磁盘分区类型
    [root@shawn ~]#fdisk /dev/sdc -l | grep "类型"
    磁盘标签类型:gpt   #gpt类型
    

    6.制作文件系统(格式化分区)

    选择需要格式化的分区
    [root@shawn ~]#mkfs.xfs /dev/sdc1
    

    7.挂载

    创建一个文件夹并挂载
    [root@shawn ~]#mkdir /test2
    [root@shawn ~]#mount /dev/sdc1 /test2
    
    "df"查看挂载情况
    [root@shawn ~]#df -h
    

    六.磁盘挂载方式

    1.什么是磁盘挂载

    • 如果要使用一块磁盘空间, 就需要准备一个空的目录作为挂载点
    • 让该磁盘设备与其进行关联
    • 可以把这个目录看成一个进入磁盘空间的入口
    • 数据真正的存在磁盘设备里面, 而不是目录这个入口

    2.挂载与卸载命令---(临时挂载)

    • 挂载: mount
    语法: "mount [磁盘设备] [挂载点]"
    [root@shawn ~]#mount /dev/sdc1 /test2
    
    • 卸载: umount
    语法: "umount [挂载点 / 磁盘设备]" #卸载填任意一方都可
    [root@shawn ~]#umount /dev/sdc1
    [root@shawn ~]#umount /test2
    如果不能卸载可以采用强制卸载选项"-l"
    

    2.磁盘挂载配置文件---(开机自动挂载)

    • /etc/fstab配置文件格式
    使用"blkid"命令查看磁盘分区设备的"UUID"及"type"
    [root@shawn ~]#blkid | grep "sdb1"
    /dev/sdb1: UUID="7e95e893-4738-4e8f-896a-d1e0f0e58cde" TYPE="xfs" 
    
    文件内容设置格式
    1.[设备的UUID] [挂载目录] [文件系统类型] [挂载参数:默认] [是否备份:0] [是否检查:0]
    例 : "UUID=987083d5-fcd9-4933-8c6f-939a1f79cb8a  /home  xfs  defaults  0 0""
    2.[设备名称] [挂载目录] [文件系统类型] [挂载参数:默认] [是否备份:0] [是否检查:0]
    例 : "/dev/sdb1 /test1 xfs defaults 0 0"
        
    "-a":从新加载"fstab"文件, 并且会检测语法是否正确
    #[root@shawn ~]#mount -a
    

    七.制作 swap 分区

    1.使用fdisk 或者 gdisk 工具分出一个磁盘空间

    分出一块空间,然后查看一下
    [root@shawn ~]#gdisk /dev/sdc
    Command (? for help): n   #创建分区
    Partition number (2-128, default 2):   #分区号默认
    First sector (34-6291455966, default = 1026048) or {+-}size{KMGTP}: #其实位置
    Last sector (1026048-6291455966, default = 6291455966) or {+-}size{KMGTP}: +1G   #分区大小
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):   #文件系统类型默认
    --------------------------------------------------------------
    Command (? for help): p   #查看
    Number  Start (sector)  End (sector)  Size   Code  Name
      1      2048     1026047   500.0 MiB   8300  Linux filesystem
      2   1026048     3123199   1024.0 MiB  8300  Linux filesystem  #成功
    ---------------------------------------------------------------
    Command (? for help): w     #保存退出
    Do you want to proceed? (Y/N): y    #确认
    The operation has completed successfully.   #分区成功
    

    2.再次查看一下磁盘设备

    查看
    # lsblk
    # ll /dev/sd   +   双击 Tab 键
    如果没有显示出来就使用"partprobe"命令刷新一下内核(经常使用的命令)
    # partprobe
    

    3.制作swap文件系统

    [root@shawn ~]#mkswap /dev/sdc2
    正在设置交换空间版本 1,大小 = 1048572 KiB
    无标签,UUID=537af376-fe42-4b9f-9bf8-f1e036a27295
    

    4.激活swap分区,并对比前后大小

    激活前使用"free"内存查看命令查看"swap"空间大小
    [root@shawn ~]#free -m
          total    used    free   shared  buff/cache   available
    Mem:   972      125      532     7      313         702
    Swap:   1906     0       1906    #可以看到大小为"1964M"
    
    使用"swapon"命令激活分区
    [root@shawn ~]#swapon /dev/sdc2
    
    再次查看"swap"空间大小
    [root@shawn ~]#free -m
          total    used    free   shared  buff/cache   available
    Mem:   972      126     532     7       314         701
    Swap:  2930      0      2930      #空间已经变成了"2930M"
        
    也可以使用"swapon -s"查看到"swap"空间及设备
    [root@shawn ~]#swapon -s
    文件名		 类型        大小      已用    权限
    /dev/sda3   partition   1952764   0       -2
    /dev/sdc2   partition   1048572   0       -3
    

    ps: 如果磁盘没有过多的分区给 swap, 可以通过文件来增加 swap空间, 但本质上还是磁盘空间

    5.使用文件来制作swap

    首先制作一个500M(大小自己设置)大小的文件,可以使用"泡泡机"
    [root@shawn ~]#dd if=/dev/zero of=/swap_file bs=500M count=1
    
    查看文件信息
    [root@shawn ~]#ll -h /swap_file 
    -rw-r--r-- 1 root root 500M 11月  7 16:56 /swap_file  #大小"500M"
    
    制作"swap"文件系统
    [root@shawn ~]#mkswap /swap_file 
    
    激活这个"文件swap分区"
    [root@shawn ~]#swapon /swap_file 
    
    使用"swapon -s"查看"swap"设备信息
    [root@shawn ~]#swapon -s
    文件名      类型       大小       已用   权限
    /dev/sda3   partition  1952764   264   -2
    /swap_file  file       511996     0    -3
    可以发现是"file"类型的"swap"分区
    

    6.关闭swap分区

    "swapoff /dev/sdc2"关闭某一个"swap"分区
    [root@shawn ~]#swapoff /dev/sdc2
    [root@shawn ~]#free -m
          total  used   free  shared  buff/cache   available
    Mem:  972    125    533   7         313         701
    Swap: 1906   0      1906      #对比之前可以发现"swap"空间减少了
    
    "swapoff -a"关闭所有"swap"分区
    [root@shawn ~]#swapoff -a
    [root@shawn ~]#free
          total   used     free    shared  buff/cache   available
    Mem:  995684  127240   547912  7736    20532      720260
    Swap: 0       0        0       #"swap"分区被置空了
    

    7.设置开机自动挂载新增的swap分区

    • /etc/fstab: 方法与上面磁盘设置相似
    方式一:使用"UUID"
    例: "UUID=de5f8b73-bebd-487d-8c80-53c6721b4a7f  swap  swap  defaults 0 0"
    
    方式二
    例: "/dev/sdc2 swap swap defaults 0 0"        #正常磁盘设备
    例: "/dev/sdc1 /file_swap swap defaults 0 0"  #磁盘文件
    

    八.服务器RAID卡配置方法

    Dell R740服务器配置RAID5+1

    九.服务器文件系统的修复

    1.什么情况会造成文件系统错误

    • Linux系统中,为了提升读写速度, 通常将要写入硬盘的数据先放在内存中(buff区)

    • 够了一波再写入内存, 如果这时突然断电或其它未知原因产生后

    • 从新启动系统后,可能会发现系统提示: 文件系统错误信息

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

    2.真实情况下修复方式

    • 操作系统进不去, 可以先进到单用户模式进行操作
    • 首先尝试 mountumount ,看看能不能重放日志进行修复
    • 不行再执行 xfs_repair -n [磁盘设备名], 只检查不修复 (它会检查文件系统, 如果损坏会列出将要执行的操作)
    • 如果检测到日志与数据不一致, 系统会推荐以读写的方式挂载, "xfs"会在挂载的时候修复这种不一致. 命令 : mount -o rw,norecovery [磁盘设备] [挂载目录]
    • 上述不成功只能使用以下实验中的方法

    2.文件系统损坏与修复演示

    • 为了让情况更明白, 我们来模拟一下文件系统损坏的实验
    • 我们模拟把我的"/dev/sdc1"损坏
    首先查看一下"/dev/sdc1"的挂载与空间情况
    [root@shawn ~]#df -h | grep "/dev/sdc1"
    /dev/sdc1    497M   26M  472M    6% /test2   #总共"497M"空间
    
    查看一下文件
    [root@shawn ~]#echo 2222 > /test2/a.txt
    [root@shawn ~]#cat !$
    2222
    
    使用"泡泡机"模拟损坏文件系统
    [root@shawn ~]#dd if=/dev/zero of=/dev/sdc1 bs=1M count=200
    记录了200+0 的读入
    记录了200+0 的写出
    209715200字节(210 MB)已复制,0.632261 秒,332 MB/秒
    
    再次操作"/test2/a.txt"文件
    [root@shawn ~]#echo 5555 > /test2/a.txt 
    [root@shawn ~]#cat !$
    5555     #发现文件读写还是正常的
    
    卸载然后再次挂载---->发现已经损害
    [root@shawn ~]#umount /dev/sdc1
    [root@shawn ~]#mount /dev/sdc1 /test2
    mount: 将 /dev/sdc1 挂载到 /test2 失败: 结构需要清理
            
    使用"xfs_repair"命令修复文件系统
    [root@shawn ~]#xfs_repair /dev/sdc1
    ..............
    ......
    done      #修复操作完成
    
    再次挂载,并查看文件
    [root@shawn ~]#mount /dev/sdc1 /test2
    [root@shawn ~]#cat /test2/a.txt 
    5555  #文件也有,说明修复成功了
    
    • 紧接着实验
    • 上面我们是用"泡泡机"制造了 200M 的大小进行覆盖
    • 现在我们来加大一点空间 255M 来进行实验
    开始模拟损坏 255M
    [root@shawn ~]#dd if=/dev/zero of=/dev/sdc1 bs=1M count=255
    记录了255+0 的读入
    记录了255+0 的写出
    267386880字节(267 MB)已复制,0.475109 秒,563 MB/秒
    
    对文件进行读写直接就报错了
    [root@shawn ~]#echo 5555 > /test2/a.txt 
    -bash: /test2/a.txt: 结构需要清理
    [root@shawn ~]#ls /test2/a.txt
    ls: 无法访问/test2/a.txt: 输入/输出错误
    
    于是来卸载进行修复----呵呵
    [root@shawn ~]#umount /dev/sdc1
    [root@shawn ~]#xfs_repair /dev/sdc1
    .....................
    ............
    .Sorry,balabala    #失败了
    
    • 修复失败了
    • 那我们只能进行强制修复了
    • 选项 "-L" 进行强制修复, 但这种情况会清除日志文件, 数据也就没有了, 意义就在于能用
    我们来进行"-L"选项进行强制修复
    ⛅第一种情况强制修复成功,可以挂载了,但没有数据
    [root@shawn ~]#xfs_repair -L /dev/sdc1
    [root@shawn ~]#mount /dev/sdc1 /test2
    [root@shawn ~]#cat /test2/a.txt
    cat: /test2/a.txt: 没有那个文件或目录
    
    ⛅第二种情况,使用了强制修复也无法成功
    [root@shawn ~]#xfs_repair -L /dev/sdc1
    ........................
    ..............
    ..Sorry, balabala
    EXiting now.    #强制也失败了
    
    强制也是失败的情况下只能重做文件系统了
    [root@shawn ~]#mkfs.xfs /dev/sdc1
    #于是一块新的磁盘分区就诞生了
    

    4.修复总结

    • xfs_repair方法, 成功后恢复数据

    • xfs_repair -L强制, 成功后数据消失

    • mkfs.xfs格式化是最终解决方案, 数据消失

    • 修复不了数据是因为磁盘分区信息表被损坏导致的, 能修复可能是没有损坏到分区信息(随机性)

    • 做本次实验的目的在于: 数据不可能 100% 的修复回来, 这时候就需要你有备份意识, 可见备份的重要性

    十.xfs文件系统备份与恢复

    1.XFS的备份级别

    级别 说明
    0 完全备份
    1~9 增量备份

    2.两种备份说明

    备份名称 说明
    完全备份 每次都将指定的目录完完整整的复制一份
    增量备份 每次都将之前备份后有变化的文件进行备份

    3.备份与恢复命令

    • 备份: xfsdump

    xfsdump -l 0 -L xxx_bak -M "bak_all" -f /opt/xxx_bak_all /test

    选项 作用
    -l (小写L) 指定level, 0~9, 默认为 0
    -L 纪录每次备份的 session 标头, 这里可以填写针对此文件系统的简易说明
    -M 可以纪录储存媒体的标头, 这里可以填写此媒体的简易说明
    -f 后面接 [将要产生的备份路径及名字] [想要备份的原路径]
    -I (大写 i) 从"/var/lib/xfsdump/inventoty" 里列出目前备份的信息状态
    • 恢复: xfsrestore

    xfsrestore -f /opt/xxx_bak_all /xxx路径

    选项 作用
    -f 后面接 [备份文件路径] [想要恢复到的路径]

    4.xfsdump使用限制

    • 必须用 root 权限
    • 只能备份已挂载的文件系统
    • 只能备份XFS文件系统
    • 只能用xfsrestore恢复
    • 透过文件系统的UUID来分辨备份档,因此不能备份相同UUID的文件系统

    5.备份与恢复原则

    • 备份 : 先做全量备份, 然后再做增量备份 (源路径的末尾不能有"/")
    • 恢复 : 先恢复全量备份, 然后按时间点从远到近恢复增量备份

    6.数据备份与恢复演示

    • 数据备份
    先准备一个已经关联了一个目录的文件系统
    怎么分区制作文件系统上面已经介绍,这里不做赘述
    [root@shawn ~]#df -h | grep "/dev/sdc1"
    /dev/sdc1    497M   26M  472M    6% /test2   
    
    在"/test2"下创建文件
    [root@shawn ~]#echo 222 > /test2/2.txt
    [root@shawn ~]#cat /test2/1.txt /test2/2.txt 
    111
    222
    
    开始一次全量备份"xfsdump", 并查看
    [root@shawn ~]#xfsdump -l 0 -L sdc1_bak_all -M "all_bak" -f /mnt/sdc1_bak_all /test2
    .....................
    ........:SUCCESS  #提示"SUCCESS"代表成功
    [root@shawn ~]#ls /mnt
    sdc1_bak_all      #发现备份文件存在
    
    我们在"/test2"下修改"2.txt",并新增"3.txt",然后进行增量备份
    [root@shawn ~]#echo 555 >> /test2/2.txt 
    [root@shawn ~]#echo 666 > /test2/3.txt
    [root@shawn ~]#cat /test2/2.txt /test2/3.txt 
    222
    555       #追加了这一行
    666       #新加了这个文件
    [root@shawn ~]#xfsdump -l 1 -L sdc1_bak_all -M "add1" -f /mnt/sdc1_bak_add1 /test2
    [root@shawn ~]#ls /mnt
    sdc1_bak_add1  sdc1_bak_all     #出现了第一次的增量备份文件
    
    • 数据恢复
    我们将"/test2"下的文件全部删除来演示数据消失
    [root@shawn ~]#rm -rf /test2/*
    [root@shawn ~]#ll /test2/
    总用量 0    #清理干净了
    
    先恢复全量备份"sdc1_bak_all", 并查看文件
    [root@shawn ~]#xfsrestore -f /mnt/sdc1_bak_all /test2
    [root@shawn ~]#ls /test2
    1.txt  2.txt
    [root@shawn ~]#cat /test2/1.txt /test2/2.txt 
    111
    222      #发现是最开始的全量备份的数据状态
    
    再恢复第一次的增量备份"sdc1_bak_add1", 并查看文件
    [root@shawn ~]#xfsrestore -f /mnt/sdc1_bak_add1 /test2
    [root@shawn ~]#ls /test2
    1.txt  2.txt  3.txt
    [root@shawn ~]#cat /test2/1.txt /test2/2.txt /test2/3.txt 
    111
    222
    555
    666       #发现正是第一次增量备份时的数据状态
    
  • 相关阅读:
    log日志----logging模块
    配置文件--configparser
    面向对象——进阶
    面向对象
    内置函数
    模块和包
    常用模块
    正则表达式
    递归函数
    内置函数+匿名函数
  • 原文地址:https://www.cnblogs.com/songhaixing/p/13942656.html
Copyright © 2011-2022 走看看