设备文件
一切皆文件,设备类型文件都放在/dev目录下,关联至设备驱动程序,进而能够跟与之对应硬件设备通信。
主要类别: block 块设备 char 字符设备
主设备号 表示设备类别 次设备号 同一设备类别数量
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,*代表激活主分区
注意:分区表很重要建议备份 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)
使用128位UUID表示磁盘和分区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 管理分区
注意:
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%
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代表被破坏
块是文件系统最小储存单位,表示文件系统储存最小文件大小为4K,WINDOWS系统里这个块叫簇。
超级块(SUPER BLOCK)用于储存各个分区块组的元数据等必要属性信息。
位图(Block Bitmap)以表格形式表示储存空间是否被使用。(1已使用,0未使用)
查看块组信息
dumpe2fs
dumpe2fs /dev/sda1
适合看centos6的块组(ext系列)
-h 查看超级块信息,不显示分组信息
注意:
1、文件系统选择的块大小有讲究,一般存放文件比较大选择4096,存放的文件比较小则选择1024或者
2048。(LINUX默认支持1K、2K、4K)
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