• 随堂练习 磁盘管理文件系统


    设备文件

    一切皆文件:open(), read(), write(), close()
    设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
    设备号码:
      主设备号:major number, 标识设备类型
      次设备号:minor number, 标识同一类型下的不同设备
    设备类型:
      块设备:block,存取单位“块”,磁盘
      字符设备:char,存取单位“字符”,键盘

    磁盘设备的设备文件命名

    /dev/DEV_FILE
    /dev/sdX #SCSI, SATA, SAS, IDE,USB
    /dev/nvme0n# #nvme协议硬盘,如:第一个硬盘:nvme0n1,第二个硬盘:nvme0n2

    虚拟磁盘

    /dev/vd
    /dev/xvd

    不同磁盘标识:a-z,aa,ab…

    示例

    /dev/sda,/dev/sdb, ...

    同一设备上的不同分区:1,2, ...

    /dev/sda1
    /dev/sda5

    范例:创建设备文件

    [root@centos8 ~]# df /boot
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/sda1 999320 130848 799660 15% /boot
    [root@centos8 ~]# ls /boot
    config-4.18.0-147.el8.x86_64 loader
    efi lost+found
    grub2 System.map-4.18.0-
    147.el8.x86_64
    initramfs-0-rescue-5b85fc7444b240a992c42ce2a9f65db5.img vmlinuz-0-rescue-
    5b85fc7444b240a992c42ce2a9f65db5
    initramfs-4.18.0-147.el8.x86_64.img vmlinuz-4.18.0-
    147.el8.x86_64
    initramfs-4.18.0-147.el8.x86_64kdump.img

    [root@centos8 ~]# mknod /data/partition-sda1 b 8 1
    [root@centos8 ~]# ll /data/partition-sda1
    brw-r--r-- 1 root root 8, 1 Apr 13 09:15 /data/partition-sda1

    [root@centos8 ~]# mount /data/partition-sda1 /mnt/
    [root@centos8 ~]# ls /mnt
    config-4.18.0-147.el8.x86_64   loader
    efi               lost+found
    grub2             System.map-4.18.0-
    147.el8.x86_64
    initramfs-0-rescue-5b85fc7444b240a992c42ce2a9f65db5.img   vmlinuz-0-rescue-
    5b85fc7444b240a992c42ce2a9f65db5
    initramfs-4.18.0-147.el8.x86_64.img vmlinuz-4.18.0-
    147.el8.x86_64
    initramfs-4.18.0-147.el8.x86_64kdump.img

    [root@centos8 ~]# ll /dev/zero
    crw-rw-rw- 1 root root 1, 5 Apr 13 08:03 /dev/zero
    [root@centos8 ~]# mknod /data/zero c 1 5
    [root@centos8 ~]# ll /data/zero
    crw-r--r-- 1 root root 1, 5 Apr 13 09:17 /data/zero

    硬盘接口类型
    IDE:133MB/s,并行接口,早期家用电脑
    SCSI:640MB/s,并行接口,早期服务器
    SATA:6Gbps,SATA数据端口与电源端口是分开的,即需要两条线,一条数据线,一条电源线

    SAS:6Gbps,SAS是一整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而SATA中不包含供电线。SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不成
    USB:480MB/s
    M.2:
    注意:速度不是由单纯的接口类型决定,支持Nvme协议硬盘速度是最快的

    服务器硬盘大小
    LFF:3.5寸,一般见到的那种台式机硬盘的大小
    SFF:Small Form Factor 小形状因数,2.5寸,注意不同于2.5寸的笔记本硬盘
    L、S分别是大、小的意思,目前服务器或者盘柜采用sff规格的硬盘主要是考内虑增大单位密度内的磁盘容量、增强散热、减小功耗

    硬盘存储术语 CHS
    head:磁头 磁头数=盘面数
    track:磁道 磁道=柱面数
    sector:扇区,512bytes
    cylinder:柱面 1柱面=512 * sector数/track*head数=512*63*255=7.84M
    CentOS 5 之前版本 Linux 以柱面的整数倍划分分区,CentOS 6之后可以支持以扇区划分分区
    范例:

    [root@centos6 ~]# echo "scale=2;512*63*255/1024/1024" |bc
    7.84

    #查看CHS
    [root@centos6 ~]# fdisk -l /dev/sda
    Disk /dev/sda: 214.7 GB, 214748364800 bytes
    255 heads, 63 sectors/track, 26108 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x0006fc79
    Device Boot Start End Blocks Id System
    /dev/sda1 * 1 131 1048576 83 Linux
    Partition 1 does not end on cylinder boundary.
    /dev/sda2 131 12879 102400000 83 Linux
    /dev/sda3 12879 19253 51200000 83 Linux
    /dev/sda4 19253 26109 55065600 5 Extended
    /dev/sda5 19254 19515 2097152 82 Linux swap / Solaris

    [root@centos8 ~]# fdisk -u=cylinder -l /dev/sda
    Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
    Geometry: 255 heads, 2 sectors/track, 26108 cylinders
    Units: cylinders of 510 * 512 = 261120 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x59474ddc

    Device Boot Start End Cylinders Size Id Type
    /dev/sda1 * 5 4117 4113 1G 83 Linux
    /dev/sda2 4117 415323 411207 100G 83 Linux
    /dev/sda3 415323 620926 205604 50G 83 Linux
    /dev/sda4 620926 822413 201488 49G 5 Extended
    /dev/sda5 620930 629154 8225 2G 82 Linux swap / Solaris

    范例:识别SSD和机械硬盘类型

    #1表示机械,0表示SSD
    [root@centos8 ~]# lsblk -d -o name,rota
    NAME ROTA
    sda 1
    sr0 1
    nvme0n1 0
    nvme0n2 0
    [root@centos8 ~]# ls /sys/block/
    nvme0n1 nvme0n2 sda sr0
    [root@centos8 ~]# cat /sys/block/*/queue/rotational
    0
    0
    1
    1
    [root@centos8 ~]# cat /sys/block/sda/queue/rotational
    1

    [root@centos8 ~]# cat /sys/block/sr0/queue/rotational
    1
    [root@centos8 ~]# cat /sys/block/nvme0n1/queue/rotational
    0
    [root@centos8 ~]# cat /sys/block/nvme0n2/queue/rotational
    0

    CHS
    CHS采用 24 bit位寻址
    其中前10位表示cylinder,中间8位表示head,后面6位表示sector
    最大寻址空间 8 GB
    LBA(logical block addressing)
    LBA是一个整数,通过转换成 CHS 格式完成磁盘具体寻址
    ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128Petabytes
    由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式

    管理存储
    使用磁盘空间过程
    1. 设备分区
    2. 创建文件系统
    3. 挂载新的文件系统

     磁盘分区
    为什么分区
      优化I/O性能

      实现磁盘空间配额限制

      提高修复速度

      隔离系统和程序

      安装多个OS

      采用不同文件系统

    分区方式
    两种分区方式:MBR,GPT

    MBR分区
    MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
    划分分区的单位:
    CentOS 5 之前按整柱面划分
    CentOS 6 版本后可以按Sector划分

    0磁道0扇区:512bytes
      446bytes: boot loader
      64bytes:分区表,其中每16bytes标识一个分区
      2bytes: 55AA

    MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)

    MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5

    MBR结构:

    主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序

    出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节

    分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4

    结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA

    范例: 备份MBR的分区表,并破坏后恢复

    # 备份MBR分区表
    [root@centos8 ~]# dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
    [root@centos8 ~]# scp /data/dpt.img 10.0.0.102:

    #破坏MBR分区表
    [root@centos8 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446

    #无法启动
    [root@centos8 ~]# reboot
    #用光盘启动,进入rescue mode,选第3项skip to shell

    #配置网络
    # ifconfig ens160 10.0.0.8/24
    # ip a a 10.0.0.8/24 dev/ens160
    # scp 10.0.0.102:/root/dpt.img .

    #恢复MBR分区表
    # dd if=dpt.img of=/dev/sda bs=1 seek=446
    # exit

    问题:利用分区策略相同的另一台主机的分区表来还原和恢复当前主机破环的分区表?

    GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)
    使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
    UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动

    GPT分区结构分为4个区域:
      GPT头
      分区表
      GPT分区
      备份区域

    BIOS和UEFI
    BIOS是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统。目前新式的电脑基本上都是UEFI启动
    BIOS(Basic Input Output System 基本输入输出系统)主要完成系统硬件自检和引导操作系统,操作系统开始启动之后,BIOS的任务就完成了。系统硬件自检:如果系统硬件有故障,主板上的扬声器就会发出长短不同的“滴滴”音,可以简单的判断硬件故障,比如“1长1短”通常表示内存故障,“1长3短”通常表示显卡故障
    BIOS在1975年就诞生了,使用汇编语言编写,当初只有16位,因此只能访问1M的内存,其中前640K称为基本内存,后384K内存留给开机和各类BIOS本身使用。BIOS只能识别到主引导记录(MBR)初始化的硬盘,最大支持2T的硬盘,4个主分区(逻辑分区中的扩展分区除外),而目前普遍实现了64位系统,传统的BIOS已经无法满足需求了,这时英特尔主导的EFI就诞生了
    EFI(Extensible Firmware Interface)可扩展固件接口,是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是BIOS 的继任者,或者理解为新版BIOS。
    UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织
    UEFI(Unified Extensible Firmware Interface)统一的可扩展固件接口, 是一种详细描述类型接口的标准。UEFI 相当于一个轻量化的操作系统,提供了硬件和操作系统之间的一个接口,提供了图形化的操作界面。最关键的是引入了GPT分区表,支持2T以上的硬盘,硬盘分区不受限制

    BIOS和UEFI区别
    BIOS采用了16位汇编语言编写,只能运行在实模式(内存寻址方式由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址)下,可访问的内存空间为1MB,只支持字符操作界面
    UEFI采用32位或者64位的C语言编写,突破了实模式的限制,可以达到最大的寻址空间,支持图形操作界面,使用文件方式保存信息,支持GPT分区启动,适合和较新的系统和硬件的配合使用

    管理分区

    列出块设备

    lsblk

    创建分区

    fdisk 管理MBR分区

    gdisk 管理GPT分区

    parted 高级分区操作,可以是交互或非交互方式

    重新设置内存中的内核分区表版本,适合于除了CentOS 6 以外的其它版本 5,7,8

    partprobe

    partprobe 命令

    注意:parted的操作都是实时生效的,小心使用

    格式

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

    范例

    parted /dev/sdb mklabel gpt|msdos

    parted /dev/sdb print

    parted /dev/sdb mkpart primary 1 200 (默认M)

    parted /dev/sdb rm 1

    parted –l 列出所有硬盘分区信息

    范例

    [root@centos8 ~]# parted /dev/sdb print
    Error: /dev/sdb: unrecognised disk label
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: unknown
    Disk Flags:

    [root@centos8 ~]# parted /dev/sdb mklabel gpt
    Information: You may need to update /etc/fstab.

    [root@centos8 ~]# parted /dev/sdb print
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:

    Number Start End Size File system Name Flags
    [root@centos8 ~]# parted /dev/sdb mkpart primary 1 1001
    Information: You may need to update /etc/fstab.

    [root@centos8 ~]# parted /dev/sdb print
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    Number Start End Size File system Name Flags
    1 1049kB 1001MB 1000MB primary

    [root@centos8 ~]# parted /dev/sdb mkpart primary 1002 1102
    Information: You may need to update /etc/fstab.

    [root@centos8 ~]# parted /dev/sdb print
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    Number Start End Size File system Name Flags
    1 1049kB 1001MB 1000MB primary
    2 1002MB 1102MB 99.6MB primary

    [root@centos8 ~]# parted /dev/sdb rm 2
    Information: You may need to update /etc/fstab.

    [root@centos8 ~]# parted /dev/sdb print
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:
    Number Start End Size File system Name Flags
    1 1049kB 1001MB 1000MB primary

    [root@centos8 ~]# parted /dev/sdb mklabel msdos
    Warning: The existing disk label on /dev/sdb will be destroyed and all data on
    this disk will be lost. Do you want to continue?
    Yes/No? Y
    Information: You may need to update /etc/fstab.

    [root@centos8 ~]# parted /dev/sdb print
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags:
    Number Start End Size Type File system Flags

    [root@centos8 ~]# parted /dev/sdb
    GNU Parted 3.2
    Using /dev/sdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) help
    align-check TYPE N check partition N for TYPE(min|opt)
    alignment
    help [COMMAND] print general help, or help on...省略

    分区工具fdisk和gdisk

    gdisk [device...]      类fdisk 的GPT分区工具

    fdisk -l [-u] [device...]   查看分区

    fdisk [device...]       管理MBR分区

    子命令

    p  分区列表

    t  更改分区类型

    n  创建新分区

    d  删除分区

    v  校验分区

    u  转换单位

    w  保存并退出

    q  不保存退出

    查看内核是否已经识别新的分区

    cat  /proc/partations

    Centos6 通知内核重新读取硬盘分区表

    新增分区用

    partx -a /dev/DEVICE

    kpartx -a /dev/DEVICE -f: force

    #示例:
    [root@centos6 ~]# partx -a /dev/sda

    删除分区用

    partx  -d --nr M-N /dev/DEVICE

    #示例:
    [root@centos6 ~]# partx -d --nr 6-8 /dev/sda

    范例:非交互式创建分区

    echo -e 'n p +2G w ' | fdisk /dev/sdc

    范例

    #增加了6,7分区
    [root@centos6 ~]# fdisk /dev/sda

    Command (m for help): w
    The partition table has been altered!
    Calling ioctl() to re-read partition table...省略

    #分区表不同步
    [root@centos6 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 3.7G 0 rom
    sda 8:0 0 200G 0 disk
    ├─sda1 8:1 0 1G 0 part /boot
    ├─sda2 8:2 0 97.7G 0 part /
    ├─sda3 8:3 0 48.8G 0 part /data
    ├─sda4 8:4 0 1K 0 part
    └─sda5 8:5 0 2G 0 part [SWAP]

    #同步分区表
    [root@centos6 ~]# partx -a /dev/sda
    BLKPG: Device or resource busy
    error adding partition 1
    BLKPG: Device or resource busy
    error adding partition 2
    BLKPG: Device or resource busy
    error adding partition 3
    BLKPG: Device or resource busy
    error adding partition 4
    BLKPG: Device or resource busy
    error adding partition 5

    [root@centos6 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 3.7G 0 rom
    sda 8:0 0 200G 0 disk
    ├─sda1 8:1 0 1G 0 part /boot
    ├─sda2 8:2 0 97.7G 0 part /
    ├─sda3 8:3 0 48.8G 0 part /data
    ├─sda4 8:4 0 1K 0 part
    ├─sda5 8:5 0 2G 0 part [SWAP]
    ├─sda6 8:6 0 2G 0 part
    └─sda7 8:7 0 3G 0 part

    #删除了6,7分区
    [root@centos6 ~]# fdisk /dev/sda
    Command (m for help): w
    The partition table has been altered!
    Calling ioctl() to re-read partition table...省略

    #同步分区表
    [root@centos6 ~]# partx -d --nr 6-7 /dev/sda

    [root@centos6 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 3.7G 0 rom
    sda 8:0 0 200G 0 disk
    ├─sda1 8:1 0 1G 0 part /boot
    ├─sda2 8:2 0 97.7G 0 part /
    ├─sda3 8:3 0 48.8G 0 part /data
    ├─sda4 8:4 0 1K 0 part
    └─sda5 8:5 0 2G 0 part [SWAP]

    文件系统概念
    文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
    从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等

    支持的文件系统:

    /lib/modules/`uname -r`/kernel/fs

    各种文件系统:https://en.wikipedia.org/wiki/Comparison_of_file_systems

    帮助:man 5 fs

    Linux 常用文件系统
      ext2:Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分区
      ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复
      ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
      xfs:SGI,支持最大8EB的文件系统
      swap
      iso9660 光盘
      btrfs(Oracle)
      reiserfs

    Windows 常用文件系统

      FAT32

      NTFS

      exFAT

    Unix
      FFS(fast)
      UFS(unix)
      JFS2
    网络文件系统
      NFS
      CIFS
    集群文件系统
      GFS2
      OCFS2(oracle)
    分布式文件系统
      fastdfs
      ceph
      moosefs
      mogilefs
      glusterfs
      Lustre
    RAW
      未经处理或者未经格式化产生的文件系统

    常用的文件系统特性
    FAT32
      最多只能支持16TB的文件系统和4GB的文件
    NTFS
      最多只能支持16EB的文件系统和16EB的文件
    EXT3
      最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
      Ext3目前只支持32000个子目录
      Ext3文件系统使用32位空间记录块数量和 inode数量
      当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
    EXT4:
      EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
      Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB
      理论上支持无限数量的子目录
      Ext4文件系统使用64位空间记录块数量和 inode数量
      Ext4的多块分配器支持一次调用分配多个数据块
      修复速度更快
    XFS
      根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
      用优化算法,日志记录对整体文件操作影响非常小

      是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB
      能以接近裸设备I/O的性能存储数据

    查前支持的文件系统

    cat /proc/filesystems

    文件系统的组成部分
      内核中的模块:ext4, xfs, vfat
      Linux的虚拟文件系统:VFS
      用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

    文件系统选择管理
    创建文件系统
    创建文件管理工具
    mkfs命令:
      (1) mkfs.FS_TYPE /dev/DEVICE
        ext4
        xfs
        btrfs
        vfat
      (2) mkfs -t FS_TYPE /dev/DEVICE
        -L 'LABEL' 设定卷标
      mke2fs:ext系列文件系统专用管理工具

    常用选项

    -t {ext2|ext3|ext4|xfs}   指定文件系统类型

    -b {1024|2048|4096}   指定块 block 大小

    -L ‘LABEL’   设置卷标

    -j     相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

    -i #     为数据空间中每多少个字节创建一个inode;不应该小于block大小

    -N #   指定分区中创建多少个inode

    -I     一个inode记录占用的磁盘空间大小,128---4096

    -m #   默认5%,为管理人员预留空间占总空间的百分比

    -O FEATURE[,...]   启用指定特性

    -O ^FEATURE       关闭指定特性

    blkid 可以查看块设备属性信息

    格式

    blkid [OPTION]... [DEVICE]

    常用选项
    -U UUID   根据指定的UUID来查找对应的设备

    -L LABEL   根据指定的LABEL来查找对应的设备

    e2label:  管理ext系列文件系统的LABEL

    e2label DEVICE [LABEL]

    findfs :查找分区

    findfs [options] LABEL=<label>
    findfs [options] UUID=<uuid>

    范例

    [root@centos8 ~]# findfs UUID=f7f53add-b184-4ddc-8d2c-5263b84d1e15
    /dev/sda2

    tune2fs:重新设定ext系列文件系统可调整参数的值

    -l   查看指定文件系统超级块信息;super block

    -L 'LABEL’   修改卷标

    -m #   修预留给管理员的空间百分比

    -j      将ext2升级为ext3

    -O    文件系统属性启用或禁用, –O ^has_journal

    -o     调整文件系统的默认挂载选项,–o ^acl

    -U UUID   修改UUID号

    dumpe2fs:显示ext文件系统信息,将磁盘块分组管理

    -h:查看超级块信息,不显示分组信息

    范例:查看ext文件系统的元数据和块组信息

    [root@centos8 ~]# dumpe2fs /dev/sda1
    dumpe2fs 1.44.6 (5-Mar-2019)
    Filesystem volume name: <none>
    Last mounted on: /boot
    Filesystem UUID: 5c2216e3-ae34-444e-aa60-83cbaebb47e7
    Filesystem magic number: 0xEF53
    Filesystem revision #: 1 (dynamic)...省略

    xfs_info:显示示挂载或已挂载的 xfs 文件系统信息

    xfs_info mountpoint | devname

    范例

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

    超级块和INODE TABLE

    块组描述符表(GDT)
    ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组成块组描述符表GDT(group descriptor table)。虽然每个块组都需要块组描述符来记录块组的信息和属性元数据,但是不是每个块组中都存放了块组描述符。将所有块组的块组信息组成一个GDT保存,并将该GDT存放于某些块组中,类似存放superblock和备份superblock的块

    文件系统检测和修复
    文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”

    注意:一定不要在挂载状态下执行下面命令修复

    fsck: File System Check

    fsck.FS_TYPE
    fsck -t FS_TYPE

    注意:FS_TYPE 一定要与分区上已经文件类型相同
    常用选项:

    -a   自动修复

    -r   交互式修复错误

    e2fsck:  ext系列文件专用的检测修复工具

    -y   自动回答为yes

    -f   强制修复

    -p   自动进行安全的修复文件系统问题

    xfs_repair:  xfs文件系统专用检测修复工具

    常用选项:

    -f   修复文件,而设备

    -n   只检查

    -d   允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

    范例:修改破坏的ext文件系统

    [root@centos8 ~]# mount /dev/sdb2 /mnt

    [root@centos8 ~]# cp /etc/fstab /mnt/f1

    [root@centos8 ~]# cp /etc/fstab /mnt/f2

    [root@centos8 ~]# ls /mnt
    f1 f2 lost+found

    [root@centos8 ~]# dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
    1+0 records in
    1+0 records out
    1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00128317 s, 817 MB/s

    [root@centos8 ~]# ls /mnt

    [root@centos8 ~]# tune2fs -l /dev/sdb2
    tune2fs 1.44.6 (5-Mar-2019)
    tune2fs: Bad magic number in super-block while trying to open /dev/sdb2

    [root@centos8 ~]# df
    Filesystem 1K-blocks Used Available Use% Mounted
    on
    devtmpfs 391676 0 391676 0% /dev
    tmpfs 408092 0 408092 0% /dev/shm
    tmpfs 408092 5824 402268 2% /run
    tmpfs 408092...省略

    [root@centos8 ~]# umount /mnt

    [root@centos8 ~]# e2fsck /dev/sdb2
    e2fsck 1.44.6 (5-Mar-2019)
    ext2fs_open2: Bad magic number in super-block
    e2fsck: Superblock invalid, trying backup blocks...
    test was not cleanly unmounted, check forced.
    Resize inode not valid. Recreate<y>? yes
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3:...省略

    [root@centos8 ~]# e2fsck /dev/sdb2 -y

    e2fsck 1.44.6 (5-Mar-2019)
    test was not cleanly unmounted, check forced.
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    Free blocks count wrong for group #0 (24280, counted=24281).
    Fix? yes
    Free blocks count wrong for group #1 (32511, counted=32509).
    Fix? yes
    Free blocks count wrong (498131, counted=498130).
    Fix? yes
    Free inodes count wrong for group #0 (8181, counted=8179).
    Fix? yes
    Free inodes count wrong (131061, counted=131059).
    Fix? yes
    Padding at end of inode bitmap is not set. Fix? yes

    [root@centos8 ~]# tune2fs -l /dev/sdb2
    tune2fs 1.44.6 (5-Mar-2019)
    Filesystem volume name: test
    Last mounted on: <not available>
    Filesystem UUID: c44b3a40-70dc-44d2-8427-b8094f73940a
    Filesystem magic number: 0xEF53
    Filesystem revision #: 1 (dynamic)
    Filesystem features: has_journal ext...省略

    [root@centos8 ~]# mount /dev/sdb2 /mnt

    [root@centos8 ~]# ls /mnt
    f1 f2 lost+found

    [root@centos8 ~]# cat /mnt/f1
    #
    # /etc/fstab
    # Created by anaconda on Wed Jan 15 21:39:15 2020
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
    #
    # After editing this file, run 'systemctl daemon-reload' to update systemd
    # units generated from this file.
    #
    UUID=f7f53add-b184-4ddc-8d2c-5263b84d1e15 / xfs
    defaults 0 0
    UUID=5c2216e3-ae34-444e-aa60-83cbaebb47e7 /boot ext4
    defaults 1 2
    UUID=9a2293a8-9277-4b18-bae1-498e0b9da145 /data...省略

    挂载
    挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为

    卸载:为解除此关联关系的过程

    把设备关联挂载点:mount Point

    挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空

    进程正在使用中的设备无法被卸载

    挂载文件系统 mount

    格式:

    mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint

    device:指明要挂载的设备

      设备文件:例如:/dev/sda5

      卷标:-L 'LABEL', 例如 -L 'MYDATA'

      UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'

      伪文件系统名称:proc, sysfs, devtmpfs, configfs

    mountpoint:挂载点目录必须事先存在,建议使用空目录

    mount常用命令选项

    -t fstype   指定要挂载的设备上的文件系统类型,如:ext4,xfs

    -r     readonly,只读挂载

    -w   read and write, 读写挂载

    -n   不更新/etc/mtab,mount不可见

    -a   自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)

    -L 'LABEL'   以卷标指定挂载设备

    -U 'UUID'     以UUID指定要挂载的设备

    -B, --bind     绑定目录到另一个目录上

    -o options:(挂载文件系统的选项),多个选项使用逗号分隔

      async 异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全

      sync 同步模式,内存更改时,同时写磁盘,安全,但效率低下

      atime/noatime 包含目录和文件

      diratime/nodiratime 目录的访问时间戳

      auto/noauto 是否支持开机自动挂载,是否支持-a选项

      exec/noexec 是否支持将文件系统上运行应用程序

      dev/nodev 是否支持在此文件系统上使用设备文件

      suid/nosuid 是否支持suid和sgid权限

      remount 重新挂载

      ro/rw 只读、读写

      user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用

      acl/noacl 启用此文件系统上的acl功能

      loop 使用loop设备

      _netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统

      defaults 相当于rw, suid, dev, exec, auto, nouser, async

    挂载规则:
      1)一个挂载点同一时间只能挂载一个设备
      2)一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
      3)一个设备可以同时挂载到多个挂载点
      4)通常挂载点一般是已存在空的目录

    卸载文件系统 umount
    卸载时:可使用设备,也可以使用挂载点

    umount 设备名|挂载点

    查看挂载情况

    #通过查看/etc/mtab文件显示当前已挂载的所有设备
    mount

    #查看内核追踪到的已挂载的所有设备
    cat /proc/mounts

    查看挂载点情况

    findmnt MOUNT_POINT|device

    查看正在访问指定文件系统的进程

    lsof MOUNT_POINT
    fuser -v MOUNT_POINT

    终止所有在正访问指定的文件系统的进程

    fuser -km MOUNT_POINT

    持久挂载
    将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载
    /etc/fstab格式帮助:man 5 fstab

    每行定义一个要挂载的文件系统,,其中包括共 6 项

      要挂载的设备或伪文件系统

      设备文件

        LABEL:LABEL=""

        UUID:UUID=""

        伪文件系统名称:proc, sysfs

      挂载点:必须是事先存在的目录

      文件系统类型:ext4,xfs,iso9660,nfs,none

      挂载选项:defaults ,acl,bind

      转储频率:0:不做备份 1:每天转储 2:每隔一天转储

      fsck检查的文件系统的顺序:允许的数字是0 1 2

      0:不自检 ,1:首先自检;一般只有rootfs才用 2:非rootfs使用

    添加新的挂载项,需要执行下面命令生效

    mount -a

    范例:centos7, 8 /etc/fstab 的分区UUID错误,无法启动

    自动进入emergency mode,输入root 密码

    # cat /proc/mounts 可以查看到/ 以rw方式挂载

    # vim /etc/fstab

    # reboot

    范例:centos 6 /etc/fstab 的分区UUID错误,无法启动

    如果/etc/fstab 的挂载设备出错,比如文件系统故障,并且文件系统检测项(即第6项为非0),将导致无法启动

    自动进入emergency mode,输入root 密码

    # cat /proc/mounts 可以查看到/ 以ro方式挂载,无法直接修改配置文件

    # mount -o remount,rw /

    # vim /etc/fstab

    将故障行的最后1项,即第6项修改为0,开机不检测此项挂载设备的健康性,从而忽略错误,能实现启动

    范例:/etc/fstab格式

    [root@centos8 ~]# cat /etc/fstab
    UUID=cb7cae1e-d227-4f64-872b-cd6cce20c911 /data/mysql ext4 noatime
    0 0
    /disk.img data/disk xfs defaults
    0 0
    /etc /mnt/etc none bind
    0 0
    [root@centos6 ~]# cat /etc/fstab
    /disk.img /mnt/disk ext4 loop 0 0

    处理交换文件和分区

    swap 介绍
    swap交换分区是系统RAM的补充,swap 分区支持虚拟内存。当没有足够的 RAM 保存系统处理的数据时会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。配置过多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露
    注意:为优化性能,可以将swap 分布存放,或高性能磁盘存放

    官方推荐推荐系统 swap 空间
    https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_gui
    de/sect-disk-partitioning-setup-ppc#sect-recommended-partitioning-scheme-ppc

    交换分区实现过程
    1. 创建交换分区或者文件

    2. 使用mkswap写入特殊签名

    3. 在/etc/fstab文件中添加适当的条目

    使用swapon -a 激活交换空间
    启用swap分区

    swapon [OPTION]... [DEVICE]

    选项:
    -a  激活所有的交换分区

    -p PRIORITY  指定优先级,也可在/etc/fstab 在第4列指定:pri=value

    范例:创建swap分区

    [root@centos8 ~]# echo -e 'n p +2G t 82 w ' | fdisk /dev/sdc

    [root@centos8 ~]# mkswap /dev/sdc1
    Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
    no label, UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f

    [root@centos8 ~]# blkid /dev/sdc1
    /dev/sdc1: UUID="d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f" TYPE="swap"
    PARTUUID="b094d43d-01

    [root@centos8 ~]# vim /etc/fstab
    UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f swap swap defaults 0 0

    [root@centos8 ~]# swapon -a

    [root@centos8 ~]# free -h
    total used free shared buff/cache available
    Mem: 3.7Gi 264Mi 3.2Gi 9.0Mi 261Mi 3.2Gi
    Swap: 4.0Gi 0B 4.0Gi

    [root@centos8 ~]# cat /proc/swaps
    Filename Type Size Used Priority
    /dev/sda5 partition 2097148 0 -2
    /dev/sdc1 partition 2097148 0 -3

    禁用swap分区

    swapoff [OPTION]... [DEVICE]

    范例:禁用swap分区

    [root@centos8 ~]# sed -i.bak '/swap/d' /etc/fstab

    [root@centos8 ~]# swapoff -a

    SWAP的优先级
    可以指定swap分区0到32767的优先级,值越大优先级越高

    如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一

    先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)

    swap的使用策略
    /proc/sys/vm/swappiness 的值决定了当内存占用达到一定的百分比时,会启用swap分区的空间
    范例:

    [root@centos8 ~]# cat /proc/sys/vm/swappiness
    30
    [root@rhel5 ~]# cat /proc/sys/vm/swappiness
    60

    说明:内存在使用到100-30=70%的时候,就开始出现有交换分区的使用。简单地说这个参数定义了系统对swap的使用倾向,默认值为30,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性

    磁盘常见工具

    文件系统空间占用等信息的查看工具df

    df [OPTION]... [FILE]...

    常用选项

    -H   以10为单位

    -T   文件系统类型

    -h   human-readable

    -i    inodes instead of blocks

    -P   以Posix兼容的格式输出

    范例

    [root@centos8 ~]# df -Th
    Filesystem Type Size Used Avail Use% Mounted on
    devtmpfs devtmpfs 887M 0 887M 0% /dev
    tmpfs tmpfs 903M 0 903M 0% /dev/shm
    tmpfs tmpfs 903M 8.7M 894M 1% /run
    tmpfs tmpfs 903M 0 903M 0% /sys/fs/cgroup
    /dev/sda2 xfs 100G 2.7G 98G 3% /
    /dev/sda3 xfs 50G 1.4G 49G 3% /data
    /dev/sda1 ext4 976M 128M 781M 15% /boot
    tmpfs tmpfs 181M 0 181M 0% /run/user/0

    [root@centos8 ~]# lsblk -f
    NAME FSTYPE LABEL UUID
    MOUNTPOINT
    sda
    ├─sda1 ext4 5c2216e3-ae34-444e-aa60-83cbaebb47e7
    /boot
    ├─sda2 xfs f7f53add-b184-4ddc-8d2c-5263b84d1e15 /
    ├─sda3 xfs 9a2293a8-9277-4b18-bae1-498e0b9da145...省略

    范例

    [root@rhel5 ~]# df
    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/mapper/VolGroup00-LogVol00
    99415464 2084776 92199220 3% /
    /dev/sda1 101086 12056 83811 13% /boot
    tmpfs 517536 0 517536 0% /dev/shm
    [root@rhel5 ~]# df -P
    Filesystem 1024-blocks Used Available Capacity Mounted on
    /dev/mapper/VolGroup00-LogVol00 99415464 2084776 92199220 3% /
    /dev/sda1 101086 12056 83811 13% /boot
    tmpfs

    查看某目录总体空间占用状态du

    du [OPTION]... DIR

    常用选项

    -h   human-readable
    -s   summary
    --max-depth=#   指定最大目录层级

    工具dd

    dd 命令:convert and copy a file
    格式:

    dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#

    常用选项

    if=file       从所命名文件读取而不是从标准输入
    of=file      写到所命名的文件而不是到标准输出
    ibs=size   一次读size个byte
    obs=size    一次写size个byte
    bs=size   block size, 指定块大小(既是是ibs也是obs)
    cbs=size   一次转化size个byte
    skip=blocks   从开头忽略blocks个ibs大小的块
    seek=blocks   从开头忽略blocks个obs大小的块
    count=n     复制n个bs
    conv=conversion[,conversion...]   用指定的参数转换文件
    conversion 转换参数:
    ascii 转换 EBCDIC 为 ASCII
    ebcdic 转换 ASCII 为 EBCDIC
    lcase   把大写字符转换为小写字符

    ucase   把小写字符转换为大写字符
    nocreat   不创建输出文件
    noerror   出错时不停止
    notrunc   不截短输出文件
    sync   把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
    fdatasync   写完成前,物理写入输出文件

    范例

    [root@centos8 ~]# cat f1.txt;
    abcdef
    [root@centos8 ~]# cat f2.txt
    123456789
    [root@centos8 ~]# dd if=f1.txt of=f2.txt bs=1 count=2 skip=3 seek=4
    2+0 records in
    2+0 records out
    2 bytes copied, 6.6515e-05 s, 30.1 kB/s

    [root@centos8 ~]# cat f2.txt
    [root@centos8 ~]# echo 123456789 > f2.txt

    [root@centos8 ~]# cat f2.txt
    123456789

    [root@centos8 ~]# cat f1.txt
    abcdef

    [root@centos8 ~]# cat f1.txt; cat f2.txt
    abcdef
    123456789

    [root@centos8 ~]# dd if=f1.txt of=f2.txt bs=1 count=2 skip=3 seek=4 conv=notrunc
    2+0 records in
    2+0 records out
    2 bytes copied, 7.6153e-05 s, 26.3 kB/s

    [root@centos8 ~]# cat f2.txt
    1234de789

    范例

    # 备份MBR
    dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

    # 破坏MBR中的bootloader
    dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

    练习
    1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项
    2、写一个脚本,完成如下功能:
    (1) 列出当前系统识别到的所有磁盘设备
    (2) 如磁盘数量为1,则显示其空间使用信息
    否则,则显示最后一个磁盘上的空间使用信息
    3、将CentOS6的CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.10-x86_64-Everything.iso文件,并将其配置为yum源

  • 相关阅读:
    使用 Facebook开源动画库 POP 实现真实衰减动画
    在命名空间下定义类型
    作为程序猿我给csdn博客加入打赏功能
    linux高可用集群heartbeat实现http的高可用
    杭电 HDU 1247 ACMHat’s Words(trie树 或着STL)
    取石子(一)-博弈数论
    区块链技术开发怎么结合已有产业链落地?
    KafkaConsumer assign VS subscribe
    KafkaConsumer assign VS subscribe
    KafkaConsumer assign VS subscribe
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/13229330.html
Copyright © 2020-2023  润新知