文件系统和系统分区

一、磁盘分区parted、fdisk、gdisk
二、cache和buffer区别
三、创建文件系统mkfs、blkid、tunefs、dumpe2fs
四、文件系统修复fsck

设备文件

一切皆文件,设备类型文件都放在/dev目录下,关联至设备驱动程序,进而能够跟与之对应硬件设备通信。

主要类别:     block   块设备       char     字符设备

主设备号         表示设备类别       次设备号         同一设备类别数量

新建位图图像 (3)

mknod  专门创建这种块文件(设备文件)     mknod    /data/sdA  b  8  1

建立一个和/dev/zero相同作用的文件              mknod      /data/zerofile  c 1  5

测试效果         dd if=/data/zerofile  of=test bs=1M count=10      ;      hexdump -C test

注意:在centos6里面设备名称有可能会因为硬盘设备增加而改变,因此信息引用用设备的UUID。

 

管理磁盘

两种分区方式: MBR,GPT

系统启动方式: BIOS+MBR         UEFI+GPT

MBR分区结构

按扇区分:512bytes一个扇区,而且扇区必须连续,中间不能隔断

一个柱面大概8m                (512*63*255/1024)

0磁道0扇区:512bytes

446bytes:boot loader

64bytes:分区表

16bytes:标识一个分区

2bytes:55AA       (结束位)

4个主分区:3主分区+1扩展(N个逻辑分区)

查看当前系统用的是什么分区              fdisk -l       #出现有逻辑分区就是MBR分区结构

用二进制程序查看硬盘分区表             hexdump -C /dev/sdb -n 512

下图是Centos6,,131单位指柱面    131*8m=1028M   block是以k为单位 sdb1大小约1GB,*代表激活主分区

新建位图图像 (3)

注意:分区表很重要建议备份                   dd if=/dev/sda of=/data/mbr_bak bs=1 count=512

查看备份分区表                                            hexdump -C /data/mbr_bak

放在远程主机上备用                                    scp /data/mbr_bak   192.168.30.128:/data/

实验:    破坏分区表             dd if=/dev/zero of=/dev/sda bs=1 count=512

注意:    lsblk看到的信息是内存中的信息           fdisk -l看到的信息是硬盘上的信息

1)如果机子没有重启,则可以直接恢复分区表       dd if=/data/mbr_bak  of=/dev/sda

2)如果机子已经重启:

1、那么必须知道是哪块硬盘,然后把硬盘拔下来链接有备份信息的其他机子,通过命令写入信息即可。

2、进入救援模式,配置网络   ifconfig ens33 192.168.30.100/24    ;  ping 192.168.30.100

远程取回备份分区表并恢复    scp 192.168.30.128:/data/mbr_bak . ; dd if=mbr_bak of=/dev/sda

3、也可以用U盘,然后进入救援模式恢复。

 

GPT分区结构

partition table 支持128个分区,

使用64位,支持8Z( 512Byte/block ) 64Z ( 4096Byte/block)

使用128UUID表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位

GPT分区头部有Protective MBR为了兼容旧软件,并且有自建的备份分区表

GPT分区分为4个区域: EFI信息区(GPT头)、分区表、 GPT分区、备份区域

 

管理分区

列出块设备:lsblk

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

partprobe   重新设置内存中的内核分区表版本(同步内存和硬盘内的分区表)

 

parted命令

注意:parted命令是立即生效的,操作时候要小心。

1、选择创建分区类型   parted /dev/sdb mklabel gpt;parted /dev/sdb mklabel msdos  (就是mbr分区)

2、创建分区的大小       parted /dev/sdb mkpart primary   1     200 (默认M)(199M空间)

3、删除分区                   parted /dev/sdb rm 1          #这里是删除sdb1

4、列出分区信息           parted –l

 

fdisk和gdisk

两者命令选项及其相似,fdisk建立mbr分区,gdisk建立gpt分区

fdisk -l 查看分区                 fdisk  /dev/sdb  管理分区

新建位图图像 (3)

注意:

1)如果分区不连续,则会造成后面分区失败,当遇到没法建立新分区,留意是否之前留有未连续空间

解决方法:直接跳过此间隙空间进行分区

2)如果在fdisk -l和lsblk看到的分区信息不一致,则要进行分区表同步

partprobe                         centos7 同步

partx -a  /dev/sda          centos6同步

partx -d –nr 6-8 /dev/sda 删除分区不同步时用(这里是连续删除6-8分区,也可以一次只删除一个)

3)建议每增加一个分区或者减少一个分区的时候就同步一次。

小技巧:

交互式fdisk命令脚本用标准输出重定向        echo -e “n\np\n\n\n+2G\nw\n” | fdisk /dev/sdc

或者用多行重定向                                              fdisk  /dev/sdc   <<EOF

 

文件系统

日志型文件系统: ext3, ext4, xfs, …       非日志型文件系统: ext2, vfat

查看当前支持的文件系统: cat /proc/filesystems

查看当前支持的文件系统: ls /lib/modules/2.6.32-696.el6.x86_64/kernel/fs   (Centos6)

注意:日常操作的命令都是通过发指令给虚拟文件系统(VFS),然后对外使用统一的接口与文件系统通

讯。所以命令并不关心用户使用的是哪种文件系统,它面对的是VFS

cache

针对读操作,文件从磁盘读到内存的时候会有一个空间,叫做cache。磁盘-》磁盘cache-》内存cache

CPU、内存、磁盘上都有缓存。hit 命中率越高数据越快。

buffer

针对写操作,在内存中针对写的操作有一个缓冲区buffer,用户执行储存操作后的数据会在buffer区待一阵

子,由系统决定在相对空闲的时候在写入硬盘。

总结:cache为了读性能更快,buffer为了写性能更好。

 

创建文件系统

mkfs  

1)mkfs -t ext4  /dev/sdb1    #Centos6用ext4  Centos7用xfs

2)mkfs -L 设定卷标     #一般建议挂载点的名字作为卷标名。卷标可以后期修改。

mkfs.ext4 /dev/sdb2 -b 2048 -L /data/sdb2

3)mkfs. 支持双击tab查询操作       mkfs.ext4 /dev/sdb2 -b 1024 -m 0.1

一般默认需要调整的是为管理人员预留空间

保留的块空间预留给管理员(ROOT)使用,默认是5%

新建位图图像 (3)           

blkid

uuidgen    生成唯一的UUID

blkid 显示所有文件系统信息类型(包括挂载和未挂载的分区)

blkid   /dev/sda

blkid -U UUID: 根据指定的UUID来查找对应的设备

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

df -T 只能看到已经挂载的分区信息

通过/etc/fstab文件下的信息找到/data所挂载的对应设备

blkid -U `grep /data /etc/fstab | sed -r “s/UUID=([^ ]*) .*/\1/”`         或者

blkid -U `grep /data /etc/fstab | cut -d” ” -f1 | cut -d= -f2`

tune2fs   

为ext2文件系统增加日志功能                                                    tune2fs -O has_journal /dev/sdb2

去掉日志功能为:                                                                      tune2fs -O ^has_journal /dev/sdb2

设备修改UUID :(不建议改,会影响配置文件)                     tune2fs -U `uuidgen` /dev/sdb2

Centos6手工添加硬盘并增加支持ACL功能                               tune2fs -o acl /dev/sdb1

Centos7手工创建的系统默认支持ACL功能

Centos6查看ext格式文件系统信息        tune2fs -l /dev/sdb2       #不支持查看xfs格式文件

Centos7查看xfs文件系统信息                 xfs_info /dev/sda3

文件系统状态:clean代表正常,noclean代表被破坏

新建位图图像 (3)

块是文件系统最小储存单位,表示文件系统储存最小文件大小为4K,WINDOWS系统里这个块叫簇。

超级块(SUPER BLOCK)用于储存各个分区块组的元数据等必要属性信息。

位图(Block Bitmap)以表格形式表示储存空间是否被使用。(1已使用,0未使用)

查看块组信息

dumpe2fs   

dumpe2fs /dev/sda1

适合看centos6的块组(ext系列)

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

注意:

1、文件系统选择的块大小有讲究,一般存放文件比较大选择4096,存放的文件比较小则选择1024或者

2048。(LINUX默认支持1K2K4K)

2、文件系统的块大小在创建文件系统时可以设定,之后不可以改,如果要改只能重新创建文件系统。

把块大小定为1K      mkfs.ext4 /dev/sdb2 -b 1024

 

破坏文件系统与修复

fsck

-p: 自动修复错误

-r: 交互式修复错误

-y:自动选择同意

常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”

实验:破坏数据并用fsck修复

破坏数据      dd if=/dev/zero of=/dev/sdb1 bs=1M count=20

查看发现被破坏(超级块被破坏)    tune2fs -l /dev/sdb1

修复数据         fsck  /dev/sdb1 -y

注意:

1、fsck修复文件系统必须确保原分区不处于挂载状态,如果在挂载必须取消挂载,不然会破坏数据!!

2、fsck  -t 一般不用因为系统会自动判断,人为如果加错了更麻烦。

3、只能修复还有未被破坏的备份超级块,如果超级块全部被破坏则无法修复。

4、会自动判断文件系统类型,支持修复xfs和ext文件系统。

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99467

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班