1. 设备文件

1. 设备文件

  • I/O Ports: I/O设备地址
  • 一切皆文件:open(), read(), write(), close()
  • 设备类型:
      块设备:block,存取单位“块”,磁盘
      字符设备:char,存取单位“字符”,键盘
  • 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
  • 设备号码:
      主设备号:major number, 标识设备类型
      次设备号:minor number, 标识同一类型下的不同设备(编号)
    注意:这个设备编码就是用ll查看设备文件时显示在设备文件大小的那两个数字
      早期centos中的IDE接口硬盘设备文件名为 /dev/hda,hdb,hdc. 从centos6之后开始都用/dev/sda,sdb,sdc 不区分硬盘接口类型了。

1.1. 设备文件一些相关概念

  • 磁盘设备的设备文件命名:/dev/DEV_FILE
  • SCSI, SATA, SAS, IDE,USB: /dev/sd 比如/dev/sda, /dev/sdb,…)
  • 虚拟磁盘:/dev/vd 、/dev/xvd  (比如/dev/vda, /dev/vdb,…)
  • 不同磁盘标识:a-z,aa,ab…
     /dev/sda, /dev/sdb, …
  • 同一设备上的不同分区:1,2, …
     /dev/sda1, /dev/sda5
  • 硬盘存储术语
     head:磁头
     track:磁道
     cylinder:柱面,柱面数量即为磁道的数量
     sector:扇区,2011年之前512字节,也就是512bytes(512B), 现如今一个物理扇区也是4K字节,也就是4Kbyte了。
     盘面:一个盘的两个面之一,一个盘上下两个盘面,磁头数即为盘面的数量
     CLUST:簇的本意就是“一群”、“一组”,即一组扇区(一个磁道可以分割成若干个大小相等的圆弧,叫扇区)的意思。因为扇区的单位太小,因此把它捆在一起,组成一个更大的单位更方便进行灵活管理。簇的大小通常是可以变化的,是由操作系统在所谓“(高级)格式化”时规定的,因此管理也更加灵活。

2. 硬盘接口类型

  • 并行:
     IDE:133MB/s
     SCSI:640MB/s
  • 串口:
     SATA:6Gbps
     SAS:6Gbps
     USB:480MB/s

3. 机械硬盘和固态硬盘

  • 机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
  • 固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
  • 相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传 输速率性能是HDD的2倍
  • 相较于SSD,HDD在价格、容量占有绝对优势
  • 硬盘有价,数据无价,目前SSD不能完全取代HHD

3.1. 机械硬盘结构

3.1.1. 盘片

一个磁盘(如一个 1T 的机械硬盘)由多个盘片(如下图中的 0 号盘片)叠加而成。

盘片的表面涂有磁性物质,这些磁性物质用来记录二进制数据。因为正反两面都可涂上磁性物质,故一个盘片可能会有两个盘面。

磁盘管理-分区和文件系统插图

3.1.2. 磁道、扇区

每个盘片被划分为一个个磁道,每个磁道又划分为一个个扇区。如下图:

其中,最内侧磁道上的扇区面积最小,因此数据密度最大

磁盘管理-分区和文件系统插图1

磁盘管理-分区和文件系统插图2

3.1.3. 柱面

每个盘面对应一个磁头。所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”。

所有盘面中相对位置相同的磁道组成柱面。如下图,

磁盘管理-分区和文件系统插图3 磁盘管理-分区和文件系统插图4

3.1.4. 磁盘的物理地址

由上,可用(柱面号,盘面号,扇区号)来定位任意一个“磁盘块”。

在“文件的物理结构”小节中,我们经常提到文件数据存放在外存中的几号块(逻辑地址),这个块号就可以转换成(柱面号,盘面号,扇区号)的地址形式。

可根据该地址读取一个“块”,操作如下:

① 根据“柱面号”移动磁臂,让磁头指向指定柱面;

② 激活指定盘面对应的磁头;

③ 磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写。

3.2. 固态硬盘

更多详细参看科普视频 https://www.bilibili.com/video/BV1k4411a79q

3.3. 簇和4K对齐

https://www.zhihu.com/question/52510166/answer/131176548

4. 磁盘寻址格式CHS和LBA

4.1. 光盘工艺分类:

  • 早期CHS分类的光盘就是每个磁道相同扇区,导致内圈小,外圈大。磁盘的整体性能受限于最内圈的技术限制,同时外圈利用率很低。
  • 后来的ZBR(Zoned Bit Recording)的磁盘扇区制造格式,将每个磁道的扇区制作数量不同,外圈多内圈少,不分磁道,柱面(磁头)等等,直接从扇区0开始指定某个扇区即可。

4.2. CHS

采用24bit位寻址
其中前10位表示cylinder,中间8位表示head,后面6位表示sector
最大寻址空间8GB

  • 计算方式:2^6*2^10*512B*2^8/1024/1024/1024=8GB
  • 注意寻址是从0开始的,比如8位的磁头数量是0-255,不是1-256.
  • 一个柱面的大小:2^6*512B*2^8/1024/1024=8MB
  • 注意其实这里面显示的都是逻辑模拟出来的数据,比如并不是说真的有255个磁头的意思,9万多个柱面(柱面最多也就1024个,怎么会那么多);
  • 这里只是把LBA方式表示的容量大小模拟换算成了CHS的方式进行表示的,把磁头和扇区数都看做最大值,然后根据不同的柱面数来表示硬盘容量的大小

4.3. LBA(logical block addressing)

 LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
 ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB(2^28*512/1024/1024/1024=128)。2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes (也就是128PiB)

4.4. 区别

 由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于8GB时,则只能使用LBA寻址方式

4.5. 注意点1:

  1. 注意目前都是用的LBA寻址方式,硬盘也早以都是按照不同磁道不同扇区数量格式制作的了。
    • 后面的MBR分区格式的LBA为32位,最大支持2TB的硬盘。
  2. Centos6上是fdisk -l的信息里面,按照柱面分区起始点(Start)和结束点(End),Centos7上按照LAB寻址格式直接以扇区分起始点(Start)结束点(End),注意差别
    • centos5等更早期的分区划分都是按照整柱面来分区,必须最小8M来分区,centos6开始可以无需必须在柱面边界分区了)
  3. 注意fdisk -l中的blocks下面的分区大小的单位都是KB,不论是6还是7版本。

5. 磁盘管理

5.1. 使用分区空间

  1. 设备识别
  2. 设备分区
  3. 创建文件系统
  4. 标记文件系统(标识此分区用于做什么)
  5. 在/etc/fstab文件中创建条目(开机挂载)
  6. 挂载新的文件系统

5.2. 为什么分区

  1. 优化I/O性能
  2. 实现磁盘空间配额限制
  3. 提高修复速度
  4. 隔离系统和程序
  5. 安装多个OS
  6. 采用不同文件系统

6. 分区

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

6.2. MBR分区

6.2.1. 基础介绍—{hexdump}

  • MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T (虽然是分区不超过2T,但由于需要4个字节32位来标识分区的起始扇区和结束扇区,所以实际上整个硬盘不能大于2T,当然4K扇区的硬盘是16T
  • 如何分区:按分区表里的起始结束位置来分区。(注意单个硬盘不能大于2T不然不支持)
      0磁道0扇区:512bytes
      446bytes: boot loader
      64bytes:分区表,其中每16bytes标识一个分区
      2bytes: 55AA
  • MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)

6.2.1.1. 注意点:

  • 分区表在0扇区,但它不是一个文件,就是0扇区里面存储的从447位byte开始到510位byte结束的数据,注意一个byte就是一个8位二进制数8bit。
  • 如果想要查看它,可把/dev/sda当做文件,看它前面的512字节即可
    • 命令为 hexdump -C -n 512 /dev/sda
  • 一个硬盘中只有一个活动分区,用于计算机启动时用于寻找系统所在位置(当做启动分区使用),它的标志就是DPT的16个字节的第一个字节(80代表活动分区,00代表非活动分区)

6.2.2. MBR硬盘主引导记录由4个部分组成

  1. 主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序
    • 地址:0-136共137个字节
  2. 出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节
    • 地址:(137-225)(226-445)前面地址一共446字节,注意从0开始的。
  3. 分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
  4. 结束标志字,偏移地址01FE–01FF的2个字节值为结束标志55AA

6.2.3. MBR硬盘分区总结构图


磁盘管理-分区和文件系统插图5


6.2.4. MBR结构图

磁盘管理-分区和文件系统插图6

6.2.5. MBR中DPT结构

磁盘管理-分区和文件系统插图7

6.3. GPT分区

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

  • 注意:GUID是32位的16进制,是微软用来实现UUID标准而创立的,它是目前最通用的一种UUID。而UUID通用唯一识别码是一种软件建构的标准,用它代表一个设备编号,最大就是2^128,基本上不会出现相同的两个UUID,注意它俩一个是标准,一个是真正的实现,有细微差别。同时也要注意它俩和GPT并不是同一类别的概念,别混淆。

磁盘管理-分区和文件系统插图8


6.4. BIOS+MBR与UEFI+GPT

  • BIOS对应引导启动MBR分区格式硬盘
  • UEFI对应引导启动GPT分区格式硬盘

磁盘管理-分区和文件系统插图9

https://www.bilibili.com/video/BV1bb411v7hp?from=search&seid=4016191818964792153

7. 管理分区—{lsblk,fdisk,gdisk,parted,partprobe}

7.1. 列出块设备—{lsblk}

lsblk

7.2. 创建分区使用—{fdisk,gdisk,parted}:

fdisk 创建MBR分区 gdisk 创建GPT分区 parted 高级分区操作

7.3. 重新设置内存中的内核分区表版本—{partprobe}

partprobe (Centos7)

7.4. parted命令—{parted}

  • parted的操作都是实时生效的,小心使用
  • 用法:
    parted [选项]... [设备 [命令 [参数]...]...]
  1. parted /dev/sdb mklabel gpt\|msdos
    • 制作分区表,但并没有真正分区,只是说先预留格式,比空硬盘(数据全是0)多了前面的分区表头的格式。
  2. parted /dev/sdb print
    • 打印分区的信息
  3. parted /dev/sdb mkpart primary 1 200 (默认单位M)
    • 上面的命令分出来199M的一个主分区 ,可以继续分 不过起始位置就要改为201了。
  4. parted /dev/sdb rm 1
    • 删除对应硬盘对应编号的分区
  5. parted –l
    • 列出所有硬盘分区信息

7.4.1. parted注意点2:

  1. parted可以交互式,直接输入parted然后回车即可,然后输入help可以查询帮助。也可以按照上面的命令非交互式进行分区。
  2. 注意分区的时候一定要连续分区,不能多个位置分成一个分区,也不能两个分区有重叠部分
  3. MBR格式,一个硬盘的主分区如果删除也不会影响其他主分区的编号,但是逻辑分区如果删除掉一个,则所有的编号会往前移动一个(原因就和MBR逻辑分区的寻址方式有关,一个指向下一个,所以必须从逻辑分区的第一个开始到最后)
  4. 注意parted立即生效,因此有风险,少用。
  5. 注意,分区方式只有两种 GPT和MBR,两种方式不能相互转换,转换的话所有的文件就会丢失(用mklabel命令)。
  6. 分区方式和文件系统格式(比如fat32,ntfs,ext4,xfs等等)是两个概念,先分区,再在分区上创建文件格式,别搞混淆。

7.5. fdisk(gdisk) 命令

  • (gdisk /dev/sdb 类fdisk 的GPT分区工具)
fdisk -l [-u] [device...] 查看分区 fdisk /dev/sdb 管理分区(交互式) 子命令: p 分区列表 t 更改分区类型 n 创建新分区 d 删除分区 v 校验分区 u 转换单位 w 保存并退出 q 不保存并退出

7.6. 同步分区表—{partx,kpartx}

7.6.1. 利用fdisk命令修改分区后需执行此步骤

  • 查看内核是否已经识别新的分区
      cat /proc/partations
  • centos6通知内核重新读取硬盘分区表
     新增分区用
      partx -a /dev/DEVICE
      kpartx -a /dev/DEVICE -f: force
     删除分区用
      partx -d --nr M-N /dev/DEVICE
  • CentOS 5,7: 使用partprobe
      partprobe [/dev/DEVICE]

7.7. fdisk(gdisk)和同步分区注意点3:

  1. fdisk虽然能支持gpt的查看等,但最好不要用它创建GPT格式分区(fdisk g命令),用gdisk命令更加适用。
  2. 分区的时候只分扩展分区也是可以的,不过就不能装系统(活动分区必须用主分区来做,用来引导启动系统,只能有一个活动分区
  3. 如果分区的时候,两个分区中间的扇区不连贯,留下了部分没有用 的分区,则下次再分区的时候如果用默认的起始扇区会掉入两个分区中间的夹缝中,需要注意。
  4. 注意分到第四个分区(假如前面都是主分区)时,选择扩展分区,然后剩下的容量全部分给它才好。(不然剩下的部分就无法使用了,因为fdisk和gdisk命令并不能扩展一个分区的大小),然后这时候再分的逻辑分区才会在扩展分区内分,才可以使用(扩展分区无法直接使用)
  5. 删除逻辑分区则其他逻辑分区的编号会往前移,不会出现跳跃的情况。删除主分区,主分区的编号不会变。如果删除扩展分区,则所有的逻辑分区都会消掉。
  6. 因为5的原因,描述设备名(尤其是逻辑分区)最好不要用分区名/dev/sdb7等方式;
    • 要使用GUID(UUID)类似的这种唯一编码的方式描述一个具体的设备
  7. fdisk的操作都在内存里,只有w退出才开始真正分区。退出后可以用下面几个命令查看分区是否完成:
    lsblk
    ll /dev/sdb*
    cat /proc/partitions
    fdisk -l /dev/sdb
    • 但是注意,前面3个命令都是查看内存中读入到的硬盘分区信息,最后一个命令才是真正读硬盘上的分区表DPT内的信息(第0个扇区,mbr格式)的信息,有时候硬盘上和DPT信息和系统内存中的硬盘信息它俩会不同步。
    • 就比如在用fdisk分区时,如果进行分区的硬盘并不是一块新添加的硬盘,而是机器中已经存在的一块旧的正在使用的硬盘,那么对它进行分区(或者是删除它的分区),则w退出后,对其进行的操作并不能立刻同步到内存中,也就是前3个命令和最后一个不同步。
    • 此时,想要同步则:centos7里面用partprobe命令即可同步,centos6里面如果是新分出老硬盘的分区,用partx -a /dev/sda命令同步;如果是删除掉老硬盘的分区,则用patrx -d --nr 6-7 /dev/sda 命令。(其中6-7代表被删除的分区编号)
    • 更多关于partx命令参考man帮助,很详细,此命令就是为了把硬盘信息同步到内核内存中的。
  8. 如果创建其他用法的分区(centos7创建分区默认都是83),最好用t选项修改标签来注明,虽然不修改也不影响使用,但注明标签的好习惯最好养成。
  9. 注意fdisk后面如果跟的是一个分区而不是硬盘,则进行操作的时候虽然也不报错,但这是错误的行为,设备名也会有问题,注意不要这样使用。
  10. 注意gdisk使用的时候不要用它来管理MBR分区格式的硬盘,不然会进行转换而导致数据丢失。

8. 文件系统基础

  文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统

  从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,**加密(权限)**等

 查看支持的文件系统:ls /lib/modules/$(uname -r)/kernel/fs

  • 由此可见文件系统支持是在内核kernel层面上的

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


8.1. Linux系统常见文件系统(可用lsblk -fblkid命令查看):

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

8.2. 其他系统常见文件系统

  • 光盘:iso9660

  • Windows:FAT32, exFAT,NTFS

  • Unix: FFS(fast), UFS(unix), JFS2

  • 网络文件系统:NFS, CIFS

  • 集群文件系统:GFS2, OCFS2(oracle)

  • 分布式文件系统: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre

  • RAW:未经处理或者未经格式化产生的文件系统,就是分区之后不创建文件系统,直接0101来进行数据存储。有时候会使用这种方式(比如数据库,大量多次读写操作,为了提升效率会直接不分系统直接写,当然也会有管理的方式)

8.3. linux文件系统分类

  • 根据其是否支持"journal"功能:
       日志型文件系统: ext3, ext4, xfs, …
       非日志型文件系统: ext2, vfat
  • 文件系统的组成部分:
       内核中的模块:ext4, xfs, vfat
       用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
  • Linux的虚拟文件系统:VFS
  • 查前支持的文件系统:cat /proc/filesystems ;或 ls /lib/modules/$(uname -r)/kernel/fs

8.3.1. VFS图示

磁盘管理-分区和文件系统插图10

9. 创建文件系统(格式化)—{mkfs,mke2fs}

9.1. mkfs命令(两种方式相同):

  1. mkfs.FS_TYPE /dev/DEVICE
       ext4
       xfs
       btrfs
       vfat (fat32)
  2. mkfs -t FS_TYPE /dev/DEVICE
  •   -L ‘LABEL’ :设定卷标,类似windows中的本地磁盘这些注释信息。
  •   -f : 强制重新创建文件系统,用于一个分区已经有了文件系统重新创建时使用

9.2. 创建ext文件系统

9.2.1. mke2fs:ext系列文件系统专用管理工具(此命令基本上被mkfs淘汰)

-t {ext2|ext3|ext4} :指定文件系统类型,不加的话**默认为ext2** -b {1024|2048|4096} :指定块(簇)大小 -L ‘LABEL’ :设置卷标 -j :相当于 -t ext3 例如:mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3 -i # :指定(根据分区空间的总大小来判断)每多少个字节则创建一个inode;这个#的大小不应该小于block大小,(相当于根据分区大小间接指定了inode的数量) 如果#小于block大小,则inode数量比这个分区可容纳的文件的数量(假如都是小文件,则一个block存储一个)还要多,不合理。 -N # :指定分区中创建多少个inode -I :一个inode记录占用的磁盘空间大小,128---4096 ,**默认为256字节** -m # :默认5%,为管理人员预留空间占总空间的百分比,直接跟数字不用加百分号% -O FEATURE[,...] :启用指定特性 -O ^FEATURE :关闭指定特性

10. 额外管理命令—{blkid,e2label,findfs,tune2fs,dumpe2fs,fsck,e2fsck,xfs_info}

10.1. 文件系统标签label相关

  • 注意文件系统标签是指向设备的另一种方法与设备无关
  1. blkid:块设备属性信息查看
blkid [OPTION]... [DEVICE] -U UUID 根据指定的UUID来查找对应的设备 -L LABEL 根据指定的LABEL来查找对应的设备 -p Device 查看设备更多详细信息(low-level superblock mode)
  1. e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
  1. findfs :查找分区
findfs [options] LABEL=<label> findfs [options] UUID=<uuid>
  • 例子:查找挂载的文件夹/data对应的设备名:
# sed -nr '/\/data/s/^.*=([^[:space:]]+).*/\1/p' /etc/fstab |xargs blkid -U /dev/sda3
  1. tune2fs:重新设定ext系列文件系统可调整参数的值
-l 查看指定文件系统超级块信息;super block -L 'LABEL’ 修改卷标 -m # :修改预留给管理员的空间百分比,后面的数字不需要加百分号% -j 将ext2升级为ext3 -O 文件系统属性启用或禁用, –O ^has_journal -o 调整文件系统的默认挂载选项,–o ^acl -U UUID 修改UUID号
  1. dumpe2fs:将磁盘块分组管理
-h:查看超级块信息,不显示分组信息,等价于tune2fs -l

10.1.1. 修改卷标和查看卷标:

  • 注意卷标可以用于mount命令fsck命令,以及/etc/fstab文件的挂载使用
修改卷标: ext4文件系统: tune2fs -L LABEL DEVICE分区 或 e2label DEVICE分区 LABEL xfs文件系统: xfs_admin -L LABEL DEVICE分区 查看卷标: lsblk -f blkid e2label DEVICE (只能用于ext系列) 创建文件系统的同时写上卷标 mkfs.FS_TPYE -L 卷标 设备

10.2. 文件系统超级块和节点表等元数据存放方式

  • 超级块和INODE TABLE

磁盘管理-分区和文件系统插图11


10.3. 文件系统检测和修复—{fsck,e2fsck}

常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下修复!

  1. fsck: File System Check,这个命令使用时会自动识别文件系统,然后间接调用fsck.FS_TYPE命令来执行,可以用tab键补全查看所有的命令。
fsck.FS_TYPE fsck -t FS_TYPE -p 自动修复错误 -r 交互式修复错误 FS_TYPE 一定要与分区上已经文件类型相同
  1. e2fsck:ext系列文件专用的检测修复工具
-y 自动回答为yes -f 强制修复

10.4. 注意点4:

  1. ext2不支持日志功能,之后的版本都支持。日志功能写入的时候是先写入日志中,然后再写入硬盘中真正的文件保存的地方进行修改,这样可以避免直接写入文件时掉电损坏文件的风险。这样的坏处就是占用更多的硬盘空间。
  2. 分布式文件系统就是把一个文件先进行分块,分成小份,然后将每块存到不同的服务器中,同时每一块也会多存几份(至少3份)到其他服务器中进行备份,但并不是存到所有的服务器里面,而是按照一定规则存到几个服务器里,这样既存储同时又进行了备份,也没占用特别大的空间
  3. linux中的命令在不同的文件系统都可以使用,是因为它运行在虚拟层(虚拟文件系统层)。这种思想在很多地方都会用到,比如java的多系统使用就是因为有java虚拟机。但有些文件系统有特定的命令,这些命令就不能通用了。
  4. 只要对分区创建了文件系统,(vfat等太旧的文件系统没有)则系统就会随机对其分配一个UUID(注意和GUID的区别,GUID是微软用来实现UUID创立的,上面有介绍,更详细的请查看其他资料),分配之后除非重新创建文件系统或者特意修改,它基本上就不会改变,也不会重复。这在集群式计算机中非常有用。
  5. 卷标可以创建的时候加上也可以不加,如果加上的话最好写上挂载目录信息。
  6. 文件系统block块代表存储文件最小的一个单位,一个文件可以多个占用多个块,但是它的最后的数据如果不到一块也会占用一块,因此如果分区要存储的文件都是小文件最好不要把块设置的过大,不然浪费空间(一个小文件占一个块,块内其他空间都浪费掉了)
  7. tune2fs -l /dev/sda1查看ext文件系统格式的分区时,注意到acl挂载。centos7上新创建的分区自动就会挂载acl功能,但是centos6上不会自动挂载acl功能,要用tune2fs -o acl /dev/sda6 给它加上,要是想要取消则加一个^符号,即为tune2fs -o ^acl /dev/sda6.
    • 但设置之后同时必须要重新挂载这个分区,才能真正使用acl功能。(利用unmountmount命令重新挂在一次即可,其实原因就是因为tune2fs它修改的是dumpe2fs或者tune2fs -l中的默认挂载选项(Default mount options),必须重新挂载。
    • 如果没有挂载,t同时默认挂载选项中也没有acl的时候,也可用后面的 mount 设备 挂载点 -o acl 一条命令可直接挂上并修改)
  8. tune2fs -l /dev/sdb2 里面显示的filesystem state=clean 表示文件系统正常。
    • 若破坏文件系统:dd if=/dev/zero of=/dev/sdb2 bs=1M count=10 ,则 tune2fs -l /dev/sdb2 无法显示(因为文件系统类似分区,也有节点表等等信息,被破坏无法识别和判断了)。
    • 它会报出Bad magic number等字样,这个magic number就是file命令查看文件类型时用来判断文件的标识信息,它就在文件头部,因为被破坏了,所以显示这个样的结果。
    • 如果想要修复这个问题,要么重新格式化(会删除所有数据),要么fsck /dev/sdb2 (后面可加上-y) 命令修复
    • 但需要注意fsck命令修复之前必须要取消挂载,以免其他用户或者程序仍在访问它
    • 注意fsck命令这种修复不能确保里面文件不丢失,仅仅能确保里面除了刚才那10M覆盖内容之外的部分可以被修复。这10M的部分因为已经被0覆盖了,所以无论怎么样都是无法修复里面的文件信息的,只能修复里面的文件系统的配置信息。
  9. 超级块的查看可以用dumpe2fs /dev/sdb2 (注意只能是ext格式,只要带有e2fs的都是只能支持ext格式的分区,xfs的命令用xfs的特定命令查看,可以输入xfs用tab按键补全,比如xfs_info命令)
最后修改日期: 2021年7月7日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。