linux第十三天

Linux磁盘管理和文件系统管理

linux 第十三

Linux磁盘管理和文件系统管理

硬盘的基本知识:https://blog.csdn.net/fyfcauc/article/details/39576065

查看设备:https://linux.cn/article-4734-1.html

avatar

avatar

centos6之后都是sd开头的了

avatar

磁盘分区

avatar

两种分区,lsblk可以查看内存中的分区

avatar

avatar

添加一块新硬盘不用重新启动机器的操作:https://blog.csdn.net/xiaoyi23000/article/details/51206425

查看硬盘的二进制表现形式:hexdump -c -n 512 /dev/sdb

只有一个分区是活动的,作为系统引导分区。

正如图中所示,0扇区的512字节记录的是开机引导以及硬盘分区,因此我们可以备份下来以备不时之需:dd if=/dev/sda of=/app/mdr bs=1 count=512(bs=1,每块1字节,一共512)。但是这最好就不要放在本机上了,机器都起不来了备份在本机没啥用

你可以试着清0:dd if=/dev/zero of=/dev/sad bs=1 count=5,把0扇区的前512字节清空:或者选择启用一部分数据破坏(这里是跳过446字节):dd if=/dev/zero of=/dev/sda bs=1 count=64 skip=446 seek=446

avatar

GPT分区,开头是保护MBR,接着是头部,分区表。接下来是一个个分区。后面还有各种备份

avatar

avatar

avatar

GPT只能用UEFI

管理分区

avatar

parted也是一个管理gpt分区的工具,而且是非交互式的执行命令

avatar

定义分区表格式,如gpt:parted /dev/sdb mklabel gpt

查看分区信息:parted /dev/sdb print

删除分区:parted /dev/sdb rm 1,1是编号

创建分区(这里展示的是创建一个主分区999m):parted /dev/sdb mkpart primay 1 1000

parted创建完成之后是可以直接在内存表中看到的(lsblk)

注意一旦设置了MBR或者GPT分区就不能重新转换了只能说删了重新来

gdisk也可以管理我们的gpt分区,gdisk /dev/sdb.输入p查看分区信息,n创建新分区,创建分区的时候建议开始扇区就默认(默认从上一扇区结尾的下一个扇区),结束扇区我们可以用+10G这样的方式,接着选择GUID编号(默认8300普通分区,可以用L查看).

AVATAR

创建mbr分区:parted /dev/sdb mklabel msdos

fdisk跟gdisk基本差不多:fdisk /dev/sdb进来后(如果你不是以扇区为单位(start,end),它会有提示。如果你fdisk /dev/sdb -CU,c这样不以dos兼容模式,u以扇区为单位,每个单位是1k。centos7默认就给你加上这两个选项,当然在7里面你可以加上-u=cylinder以柱面显示),输入n创建。如果进来它没问你创建的是主分区还是其他,那就是因为你没有选择余地了。

分区的标识设备名是不稳定的(比如,把sda6删除,7就自动变成6了),因此以后写脚本的时候要注意下,用文件系统的uuid号。

在centos6中,mbr分区操作后w存盘会有提示(同步到内存失败了),首先判断下是增加还是删除分区导致不同步,如果是增加:partx -a /dev/sdb.提示错误不用管。删除:partx -d --nr 6-7 /dev/sda.在7中就不用这么麻烦了,可以partprobe

avatar

如果你是一块新硬盘,在创建的时候会多些问题,问你创建主分区还是扩展分区,你可以直接创建扩展分区,当然要大些空间,因为下面还要创建逻辑分区

如果有不同步等问题,可以用echo $?

到这里还是RAW的文件系统类型,直接操作二进制

文件系统

当我们分区完成后,就要创建文件系统了:

avatar

avatar

查看文件系统驱动:ls /lib/modules/3.10.0-862.el7.x86_64/kernel/fs/fat/.这是查看内支持的文件系统

xfs号称支持大系统文件,通过df -T我们可以看到centos7默认的文件系统就是xfs

FAT32只支持最大的4g大小的文件

我们的文件系统管理工具面对的是虚拟的文件系统VFS

avatar

avatar

avatar

用mkfs命令创建文件系统,一般通常创建系统的对应默认文件系统,如centos6一般创建ext4,7中xfs.ext4相比3也就文件可以更大而已,但是3相对2来说是多了日志功能

创建ext4的文件系统:mkfs.etx4 /dev/sdb1。(把.换成-t参数也行)创建完成之后可以使用blkid查看uuid。当然你也可以一个分区也没有整一个硬盘创建文件系统,但是一般不这样做

注意扩展分区是不同创建文件系统的

avatar

查看文件系统有没有日志功能:tune2fs -l /dev/sdb1。 tune2fs是调整和查看ext2/ext3文件系统的文件系统参数。查看Fileststem features,看看有没有日志的单词,有就有没有就没有(has_journal)。ext2加上日志功能就变成ext3:tune2fs -O has_journal /dev/sdb1.如果需要去掉:tune2fs -O ^has_journal /dev/sdb1

卷标,说白了也就是分区的名称,比如window系统上你可以重命名盘的名字,linux上可以这样: mkfs.xfs -L /mnt.sdb1 /dev/sdb1 -f。最好就跟你以后要挂载的文件名一样。更改卷标:e2label /dev/sdb1 /mnt/sdb1(ext文件系统的)

我们的tune2fs -l的magic numbe可以判断文件系统,Default mount options:挂载选项,centos6中默认创新的新分区没有acl功能,可以使用tune2fs -o acl /dev/sdb1加上acl权限,删除那就加上个脱字符:tune2fs -o ^acl /dev/sdb1

Block size,4k,支持1k,2k,4k,这代表着给文件分配的最小单位,window上也有(可以创建个文本文件看看)。在格式化的时候是可以指定大小的:mkfs.ext4 -b 1024 /dev/sdb1.块一旦指定了就不能再更改除非重新格式化

avatar

改变节点号数量:mkfs.ext4 -N1315840 /dev/sdb1.节点数决定文件数。但是你块数量比你节点少,那就没啥意思了。我们可以按照移动的对应关系设置块大小:mkfs.ext4 -i 40960 /dev/sdb3,这是更改inode值,跟块是10:1的关系

Reserved block count保留快大小,给我们的root用的。默认预留5%的空间,修改大小:mkfs.ext3 -m 1 /dev/sdb1.这个数字是百分比的。可以小数,但也别太苛刻

其他注意点

超级块

avatar

在创建文件系统的时候,会把我们的文件系统分为两部分,元素据存储区和数据存储区,我们在这个文件系统上创建文件需要扫描inode位图找到未必适用的inode节点,然后再扫描块位图来找到未被使用的磁盘块来存放数据。但是如果这个分区很大,那么需要存储的文件就非常大,inode位图以及块位图也会非常的大,那么要在里面找到空闲的inode以及磁盘块有点耽误时间。所以在实际系统中,仔细观察上图,我们的文件系统,最开始是主引导扇区,有MBR,主引导记录以及磁盘分区表,这个盘有4个分区,每个分区都可装系统,那么这个计算机启动的时候道理启动哪一个分区上的linux?这就得看哪个分区是活动的。因此在每一个分区上都有引导扇区(Boot Sector).就算你没装操作系统也有引导扇区。

引导扇区之后剩余的空间就创建文件系统了,文件系统非常大的话就要对磁盘块进行分组,每个组都有元素据存储区和数据存储区,元素据储存区有自己的inode表,inode位图,这样一分就很容易找到文件了。注意文件是可以跨块组的。

在给硬盘分完区后,每个分区都是一个完整的文件系统,而每个文件系统开始的位置的那个块就称之为超级块(SuperBlock)。主要用于记录这个分区中块的使用情况,超级块起到了索引的作用,所以至关重要。这个数据结构通常在分区的第2K位置(根据块大小而有所不同),包含了所有inode,blocks的数目,用量,剩余量,简单说就是存储了全局信息。超级快就是简单的说记录我们这里面有多少个分组等信息,一旦被破坏就不太好,所以一般都有备份,超级快在每个块组里面都有备份(都一样的),但是只有第一个超级块会读到内存里面,如果第一个坏了还可以使用第二个来恢复。当然这些备份也不是每个都备份

除了超级块还有一个块组描述表也存放在元数据区,记录快组从哪开始是iniode表,从哪开始是数据块,并且还记录在块组中空闲的inode还有数据块。这表也是在快组描述区有一样的备份。系统内核会加载我们第0个块住的快组描述符,一旦坏了可以使用其他的快组中的表来恢复。

可以使用dumpe2fs /dev/sdb1来查看某个分区上的分组情况(ext系统)。并且我们在创建ext系统的时候是有明确的提示超级块备份在哪的(Superblock….)

如果被破坏了我们可以使用:fsck /dev/sdb5来修复

avatar

avatar

avatar

关于挂载

命令:mount /dev/sdb1 /mnt

取消挂载

1
2
3
4
# umount -v /dev/sda1          通过设备名卸载  
/dev/sda1 umounted
# umount -v /mnt/mymount/ 通过挂载点卸载
/tmp/diskboot.img umounted

注意挂载如果你没有开机自动挂载当你重启之后会取消挂载了

如果一个目录已经被某个分区挂载了,但是这时候又有另一个分区挂载到这个目录,那么源分区保存的数据将会被隐藏,一个挂载点同一时间只能挂载一个目录,一个设备可以挂到多个目录

系统会避免让你循环挂载,比如我把boot挂载到mmt文件夹下,但是再次将boot挂载到mnt下的boot文件夹里,当然你是可以循环进入的,但是当你第二次访问的时候就会没了(但是window允许你这样循环10次,目录树有深度)


linux第十三天
http://www.kju147.com/2019/01/09/linux第十三天/
作者
个人学习
发布于
2019年1月9日
许可协议