磁盘管理简介

磁盘管理

介绍

设备文件

  • 目录

    • /dev
  • 块设备

    • b-block,随机访问,如磁盘、光盘
  • 字符设备

    • c-character,线性访问,如键盘、打印机

查看磁盘

  • lsblk

磁盘命名方式

  • /dev/sd[a-z]

    • sd-串口设备

      • sata
      • usb
      • scsi
      • sas
  • /dev/hd[a-z]

    • hd-并口设备

      • ide
  • /dev/vd[a-z]

    • KVM虚拟化设备
  • /dev/sr0

    • 镜像文件,文件系统iso9660
  • 命名

    • 设备:/dev/sda /dev/sdb …
    • 分区:/dev/sda1 /dev/sda2 …

磁盘分类

  • 机械硬盘HDD

    • 物理结构

      • 主轴、磁盘、磁头、磁头臂、永磁铁、空气过滤片
    • 逻辑结构

      • 磁道

        • 以盘片中心为圆心,半径大小不同的同心圆组成的环形区域
      • 扇区

        • 磁道上的一段圆弧,1扇区512B,磁盘中最小单位
          B(Byte) 1Byte(字节)=8bit(比特)
      • 柱面

        • 是虚的,类似于桶壁,是由相同半径的磁道组成的圆柱形环壁 13个柱面约等于100M
      • 磁盘容量

        • 512byte(一个扇区大小)扇区数量柱面的个数*磁头的个数
  • 固态硬盘SSD

磁盘读写速度影响因素

  • 寻道时间
  • 旋转时间
  • 数据传输时间

存储类型

  • NAS(Network Attached Storage) 网络附加存储

    • 是一个网络上的文件系统 应用:NFS
  • SAN(Storage Area Network)存储区域网络

    • 是一个网络上的磁盘,性能最好,贵
  • DAS(Direct-attached Storage) 直连存储,如U盘、移动硬盘

  • 分布式存储 hdfa ceph

  • 云存储

设备文件

  • 创建mknod

    • mknod [OPTION]… NAME TYPE [MAJOR MINOR]

      • mknod /dev/sdb1 b 8 17
    • type:b c p

    • 一个设备可以对应有多个名称

  • 设备号

    • major

      • 主设备号,区分设备类型
    • minor

      • 次设备号,同一类型的编号
    • 查看

      • lsblk、cat /proc/partitions、ll第5列

磁盘分区

分区目的

  • 易于管理和使用,加速文件查找速度
  • 数据安全

分区表类型

  • MBR(msdos)

    • 特点

      • 最大支持2TB以内的硬盘
      • 主分区+扩展分区数量不超过4个
      • 扩展分区最多只有一个
    • 分区类型

      • 主分区primary

        • 编号1-4,可直接格式化使用
      • 扩展分区exrended

        • 编号1-4,不能直接格式化使用
      • 逻辑分区logical

        • 在扩展分区上划分,编号5-64(串口设备),可格式化使用
          逻辑分区的分区表位于扩展分区内
    • 组成

      • MBR(主引导记录)位于磁盘的前512字节
        bootloader(446)+分区表(64)+magic number(2)
        引导加载程序 每个分区表占16B
  • GPT

    • 最大128个分区,无内存限制
  • loop

    • root、swap

分区相关

    1. 确定磁盘标签类型(如果是新磁盘)
  • 2)分区

  • 3)通知内核重读分区表:partprobe

    • 内核记录分区表的文件: /proc/partitions
  • 4)创建文件系统 或称为格式化

    • mkfs.xfs /dev/sdb1

      • -f 强制覆盖
      • -b 格式化时指定块的大小 默认4096
    • mkfs.ext4 /dev/sdb2

  • 5)挂载使用(相当于U盘要插到电脑上使用)

分区命令

  • fdisk

    • 查询

      • fdisk -l

        • 列出所有设备的分区表信息
      • fdisk -l /dev/sda

        • 列出指定设备的分区表信息
    • 分区

      • 分区表

        • 默认使用MBR,磁盘标签类型:dos
      • fdisk /dev/sdb

        • n 创建分区

          • p 主分区
          • e 扩展分区
          • l 逻辑分区
        • p 打印分区表

        • d 删除分区

        • m 帮助菜单

        • q 不保存退出

        • w 保存退出

      • 步骤

        • n创建>p/s选择分区类型>选择分区编号>选择扇区起始块>输入分区大小(+1G)>w保存退出
  • parted

    • 语法

      • parted [选项] 设备 命令 参数
    • 选项

      • -l

        • 列出所有设备的分区表信息
      • -s

        • 脚本模式,不交互
    • 命令

      • p/print

        • 打印分区表

          • parted -s /dev/sdb p
      • mklabel/mktable

        • 创建磁盘标签,接msdos或gpt(新磁盘)
          改变磁盘标签将丢失该磁盘上所有的数据

          • parted -s /dev/sdd mktable gpt
          • parted -s /dev/sdd mklabel gpt
      • mkpart

        • 创建新的分区:
          mkpart 类型或名字 起始大小 结束大小

          • parted -s /dev/sdc mkpart p 0 5G
          • parted -s /dev/sdd mkpart d2 2G 4G
      • rm

        • 删除分区:rm 编号

          • parted -s /dev/sdc rm 1
      • rescue

        • 恢复分区:rescue 起始大小 结束大小

          • parted -s /dev/sdd rescue 0 10G
      • q/quit

        • 退出
  • gdisk

    • gdisk /dev/sdc

      • 功能键与fdisk一致
      • 使用GPT分区表,一个硬盘只能使用一种分区方式

文件系统

介绍

  • 文件系统是对存储空间的分配和管理,负责文件的存储并对存入的文件进行保护和检索的系统

  • 本地文件系统

    • windows:fat32、ntfs
    • linux:ext2、ext3、ext4、xfs、iso9660…
  • 网络文件系统

    • ngs、cifs、gludterfs、hdfs、ceph(分布式)

文件系统结构

  • superblock超级块

    • block与inode的总量、使用量、剩余量

      • df -i 查询inode
    • 大小:block-1/2/4KB,inode-128/256B

    • 挂载时间、写入数据的时间、检查 (fsck) 的时间等文件系统相关信息

    • 每个block group 都可能含有superblock,可用于superblock的修复

    • 若超级块损坏分区不能使用

  • inode table

    • 存储文件的元数据:权限、属主属组、大小、stat时间、文件内容所在的block number
    • 一个文件占用一个inode,若inode分配完,即使有空余内存也无法再存入文件
    • 如果两个的i节点相同, 说明他们是相同的文件
  • data block

    • 存储文件的实际数据,一个文件可能占用多个block

查看文件系统类型信息

  • dumpe2fs /dev/vg1/lv2 (ext家族系统)
  • xfs_info /dev/vg1/exam (xfs系统)

文件存储形式

  • 目录的内容为文件名及其inode映射

  • 文件的内容位于block中,由其inode索引

  • 文件操作

    • mv移动或重命名

      • 更改文件名及其inode的存放位置,inode不变
    • rm删除文件

      • 删除文件名及其inode映射
      • 该inode及其对应block置为可用状态(原内容仍存在但可覆盖)
    • cp复制文件

      • 分配新的inode,复制block

文件系统修复

  • ext

    • 案例1: 系统无法启动

      • 输入root密码 -> 修复损坏分区fsck /dev/sda2 -> yes -> reboot
    • 案例二:Read-only file system

      • 出现原因

        • 没有正常关机
        • 硬盘故障
      • 尝试解决

          1. 先卸载此分区
          1. 再fsck.ext4  -fy /dev/sdb1
          1. 最后挂载此分区,检查是否可以正常读写
        • 如果仍旧不可以正常读写,请报修磁盘
    • 案例三:修复superblock

      • 找到备份的superblock
        dumpe2fs -h /dev/datavg/lv1 |grep ‘Blocks per group’
      • 利用备份的 superblock恢复superblock
        fsck.ext4 -b 8192 /dev/datavg/lv1
  • xfs

    • xfs_metadump -o /dev/sdb1 /save/sdb1.metadump#保存元数据信息
    • umount /dev/sdb1#卸载文件系统
    • xfs_repair -L /dev/sdb1#强制日志文件(log)清空
    • xfs_repair -n /dev/sdb1#文件系统检查
    • xfs_repair /dev/sdb1#文件系统修复

文件链接

  • 软链接/符号链接

    • 特点

      • 1.类似于windows快捷方式,存放的是路径
      • 2.产生新的inode
      • 3.可以跨文件系统创建
      • 4.删除源文件后链接文件无效
      • 5.可以对目录做软链接
    • 创建

      • ln -s 链接源 链接名

        • ln -s /file1 /home/file11
    • 文件类型

      • l 链接文件
  • 硬链接

    • 特点

      • 1.对主要数据文件备份 防止误删除
      • 2.不产生新的inode
      • 3.任意删除一个文件名,文件都不会损坏
      • 4.不可以对目录做硬链接
      • 5.不可以跨文件系统创建
    • 创建

      • ln 链接源 链接名

        • ln /file2 /home/file22
    • 文件类型

      • 与链接源文件类型一致

挂载

挂载目的

  • 通过挂载点,得到访问设备的入口

命令

  • mount挂载

    • 用法

      • mount [-t vfstype] [-o option[,option]…] device dir

        • mount /dev/sdb1 /file
      • 挂载点目录需已存在,同一挂载点只能挂载一个设备,一个设备可挂载多个目录

    • 选项

      • -t 指定文件系统类型
      • -o 指定挂载属性
      • -a 挂载/etc/fstab中的未挂载项
    • 挂载属性

      • ro 只读文件系统 read only

      • rw 可读写 read write

      • remount 重新挂载已挂载的文件系统

      • defaults 默认属性:rw, suid, dev, exec,auto, nouser, and async

        async 异步写入
        sync 同步写入
        auto/noauto 是否支持开机挂载
        dev/nodev 是否支持设备文件
        exec/noexec 是否允许分区上拥有可运行二进制文件
        suid/nosuid 是否允许分区上含有suid/sgid的文件格式
        user/nouser 是否允许分区让任何使用者运行mount
        _netdev 如果连的上就开机挂载,如果连不上就不挂载

  • umount卸载

    • umount 设备名称/挂载点
  • 查看

    • 已挂载文件系统信息

      • df -h
    • 查看设备uuid

      • blkid /dev/sdb1

开机挂载

  • 通过配置文件

    • vim /etc/fstab

    • /dev/sdb1 /mnt xfs defaults 0 0
      #设备名称 挂载点 系统类型 挂载属性 dump fsck

      • 设备名称

        • /dev/sdb1
        • UUID=设备uuid
        • 10.11.59.110:/abc #远程挂载
      • 挂载属性

        • defaults
        • defaults,ro…
      • dump备份

        • 0 不备份
        • 1 一天一次
        • 2 两天一次
      • fach检查

        • 0 不检查
        • 1 先检查
        • 2 后检查
    • 编辑完后使用mount -a挂载测试,如果有错将导致系统启动失败

  • 通过脚本文件

    • vim /etc/rc.d/rc.local

      • mount /dev/sdb1 /mnt/sdb1
    • chmod +x /etc/rc.d/rc.local

    • 开机过程中执行的一个脚本,不会影响系统启动。注意加上执行权限

交换分区

作用

  • 用硬盘空间当作内存使用防止OOM内存溢出

查看swap

  • free -m
  • top
  • swapon -s
  • swapon -d

制作方法

  • 用分区实现

    • 1.准备新分区

      • /dev/sdb2
    • 2.格式化成swap分区

      • mkswap /dev/sdb2
    • 3.激活swap分区

      • swapon /dev/sdb2
    • 4.查看swap分区

      • swapon -s
    • 5.开机挂载

      • vim /etc/fstab
        /dev/sdb2 swap swap defaults 0 0
  • 用文件实现

    • 1.使用/dev/zero设备制作1G的/tmp/swap.txt文件

      • dd if=/dev/zero of=/tmp/swap bs=1M count=1024
        ll /tmp/swap -h
    • 2.格式化成swap分区

      • mkswap /tmp/swap
    • 3.激活swap

      • swapon /tmp/swap.txt
    • 4.查看swap分区

      • swapon -d
    • 5.开机挂载

      • vim /etc/fstab
        /tmp/swap.txt swap swap defaults 0 0
  • dd

    • 复制文件,根据设置参数转换为文件命令

      • if: input file|device 从 file|device中读取
      • of: output file|device 写到file|device里去
      • bs: blocksize 块的大小
      • count:块的数量
    • /dev/zero 无限0资源设备

    • /dev/null 垃圾桶 黑洞设备文件

卸载swap

  • 1.让swap无效

    • swapoff /dev/sdb2
    • swapoff /tmp/swap.txt
    • swapoff -a 关闭所有
  • 2.删除/etc/fstab配置文件内的设置

  • 3.删除交换文件

    • rm -rf /tmp/swap.txt

磁盘阵列

介绍

  • RAID独立的磁盘冗余阵列,将多块物理磁盘按照不同的方式组合起来形成一个硬盘组,从而提供比单个磁盘更高的存储性能和安全性
  • 组成raid的不同方式称为raid的级别,常见级别:0 1 5 6 10 50

raid的分类

  • 软raid

    • 用软件实现,为了提高速度,所有操作都是通过操作系统及cpu实现
  • 硬raid

    • 通过硬件来实现

      • 1.主板集成raid
      • 2.阵列卡做raid

raid级别

  • raid 0

    • 条带集,将数据分散存储到多个磁盘(同时读写),磁盘利用率100%,存储性能最高,但无数据保护
  • raid 1

    • 镜像集,将数据全部复制到另一块磁盘备份,读写性能较差,利用率最低,数据安全性最高
  • raid 5

    • 带奇偶校验条带集,数据块和对应校验信息存放在不同磁盘,可通过校验码及其他盘恢复一块损坏盘数据,多个磁盘可同时写入,综合性能最佳
  • raid 10

    • 先将4块硬盘做成两组raid1,再将两组raid1做成raid0

制作软raid

  • 命令

    • mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sd{b…e}

      • -C, --create 创建阵列
      • -n 指定设备数量,后面跟上设备列表
      • -x 指定备盘
      • -l 指定raid的级别
      • -v 显示创建过程
      • -D 查看raid的详细信息
  • 查看创建好的raid阵列

    • mdadm -D /dev/md5
    • cat /proc/mdstat
  • 格式化制作文件系统

    • mkfs.xfs /dev/md5
  • 挂载

    • mount /dev/md5 /md5
  • 测试

    • mdadm -f /dev/md5 /dev/sdc #指定一个磁盘为坏磁盘(仅模拟)
    • mdadm -r /dev/md5 /dev/sdc #热拔(删除)/dev/sdc
    • mdadm -a /dev/md5 /dev/sdf#添加新设备到raid阵列
  • 关闭

    • umount /dev/md5
    • mdadm -S /dev/md5
  • 启动

    • mdadm -Ds > /etc/mdadm.conf #将当前raid信息保存至配置文件,已便以后进行装配
    • mdadm -A /dev/md5
  • 删除

    • 1.先卸载

    • 2.停止阵列

    • 3.删除配置文件

    • 4.清除成员的元数据

      • mdadm --zero-superblock /dev/sd{b…f}

LVM逻辑卷管理

概念

  • 物理卷PV:单个硬盘或分区做成
  • 物理区域PE:PV中的最小存储单元,指定后不可更改,同一卷组中PV的PE大小需一致
  • 卷组VG:单个或多个物理卷组成
  • 逻辑卷LV:从卷组中获取空间,可格式化挂载使用,支持在线扩容
  • 逻辑区域LE:LV中的最小存储单元,大小取决于PE

创建

  • 1.准备物理磁盘/分区

  • 2.创建PV:pvcreate /dev/sdb

  • 3.创建VG:vgcreate vg1 /dev/sdb

  • 4.创建LV

    • lvcreate -L 4G -n lv1 vg1
    • lvcreate -l 10 -n lv1 vg1
    • #-l 指定PE数量;-L指定具体空间
  • 5.创建文件系统并挂载

    • mkfs.xfs /dev/vg1/lv1
    • mount /dev/vg1/lv1 /mnt/lv1

查看

  • pvs/pvscan/pvdisplay
  • vgs/vgscan/vgdisplay
  • lvs/lvscan/lvdisplay

扩容

  • pv扩容>vg扩容>lv扩容>文件系统扩容

  • 1.pv扩容:添加磁盘/分区,pvcreate /dev/sdc 创建pv (有空间则省略)

  • 2.vg扩容:vgextend vg1 /dev/sdc vgs查看剩余空间 (有空间则省略)

  • 3.lv扩容:lvextend -L +5G /dev/vg1/lv1 #增加5G / -l +10

  • 4.文件系统扩容

    • xfs系统

      • xfs_growfs /dev/vg1/lv1 #也可写挂载点
    • ext系统

      • resize2fs /dev/vg1/lv1
    • 若lv未被使用则省略

缩容

  • 注意

    • 1.风险大有可能造成数据的损坏
    • 2.确保缩减后的空间大小依然能存储原来的所有数据
    • 3.不要在线缩容
    • 4.在缩减之前强制检查文件系统
  • ext4缩容

    • 1)先卸载:umount /lv0
    • 2)强制检查文件系统:e2fsck -f /dev/vg0/lv0
    • 3)缩减文件系统:resize2fs /dev/vg0/lv0 1800M
    • 4)缩减逻辑卷:lvreduce -L 1800M /dev/vg0/lv0
    • 5)测试缩减逻辑卷后逻辑卷能否正常使用
  • XFS不支持缩容

删除

  • lvremove /dev/vg1/lv2
  • vgremove vg1
  • pvremove /dev/sdb

改名

  • vgrename
  • lvrename

快照

  • 工作原理

    • LVM中snapshot通过“写时复制”(copy on write) 来实现,即当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data);创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里。
    • 改变数据包括:增、删、改,增加时会生成一个字符设备文件用于标记该文件原始不存在
  • 实验步骤

    • 1.挂载lv0逻辑卷,在逻辑卷内写入数据:mount /dev/vg0/lv0 /lv0
    • 2.给/dev/vg0/lv0逻辑卷做快照:lvcreate -n lv0.snap -s -L 800M /dev/vg0/lv0
    • 3.改变lv0逻辑卷的数据
    • 4.恢复数据 会删除快照卷 恢复之前要卸载
      umount /dev/vg0/lv0;lvconvert --merge /dev/vg0/lv0.snap
    • 5.挂载lv0逻辑卷查看数据是否恢复到拍快照的那一刻的状态

杂七杂八

改变根

  • chroot /test #将/test目录作为根

查看程序所依赖的库

  • ldd /bin/cat

备份MBR

  • 注意

    • MBR一定要备份在另外的磁盘上
  • 实验

    • 备份/dev/sda的MBR

    • 步骤

        1. 将/dev/sda的MBR备份到/dev/sdb1
        • mount /dev/sdb1 /mnt/
        • dd if=/dev/sda of=/mnt/MBR.bak bs=512 count=1
        1. 破坏/dev/sda的MBR
        • dd if=/dev/zero of=/dev/sda bs=512 count=1
        1. 重启系统,发现已经无法启动
        1. 进入救援模式,恢复/dev/sda的MBR
        • mkdir /sdb1
        • mount /dev/sdb1 /sdb1
        • dd if=/sdb1/MBR.bak of=/dev/sda
      • reboot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值