磁盘及文件系统管理_学习笔记

时间:2017.12.01
作者:李强
参考:man,info,magedu讲义,神奇的internet
声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。

主要使用的命令有:
分区:
fdisk
gdisk
parted
格式化:
mkfs
mke2fs
挂载
mount
umount

我们想要存放数据就需要存储在磁盘上
磁盘的概念为机械硬盘的概念:
head 磁头和盘面的数量是一样的用8bites表示就是2^8
sector 扇区用6bites表示就是一个磁道的扇区数只能是2^6
track 一个盘面有几个磁道就是用10bites表示就是2^10
cylinder 柱面
CHS 采用24位寻址磁盘最多能存放多少数据,2^82^10^2^6512Byte =8GiB
LBA(logic block addressing)采用48位寻址2^48*512Byte=128PiB

一个磁盘我们要分区:
分区的概念就是分区早期就是用来在一个磁盘上安装多个操作系统的,然后在MBR的boot-loader中会在开机的时候看到有几个选项可以选,比如windwos,linux这样的菜单,然后引导你到指定的分区去加载系统。
针对BIOS主机使用fdisk命令建立MBR(Master Boot Record)
0磁道0扇区用于建立MBR,其中前446Byte用于放boot loader ,其中64Byte用于放DPT,后2Byte放结束标志55AA(16进制数),如下图所以一个硬盘分区的主分区最多只能是4个。
磁盘及文件系统管理_学习笔记
针对UEFI主机使用gdisk命令建立GPT (GUID partition table ),可以支持128个分区,
磁盘及文件系统管理_学习笔记
1、分区
分区是来干嘛的,就是把一个整块的硬盘划成一个个单独的空间供使用,就像建宾馆,先划成一个个房间,给房间编上号,然后等待客人入住,
按照什么标准来划分房间呢,
比如一共有多少个扇区,
我们从某个位置开始,选择大小,确定为一块为办公室/dev/sda1供使用。
继续选择一块大小,确定为前台供办理入住/dev/sda2,
继续选择一块大小,确定一块为客房使用/dev/sda3,
继续选择一块大小,确定一块为休息区/dev/sd5
剩余空间可以保留供以后规划,
那么这些地方怎么去呢,我们就需要在门口放一个导航窗口就是MBR(小宾馆)|GPT(度假岛),
其中记录了
/dev/sda1从哪里到哪里 多大
/dev/sda2从哪里到哪里 多大
/dev/sda3从哪里到哪里 多大
/dev/sda5从哪里到哪里 多大

2、格式化建立文件系统
然后是格式,我们确定了几块的位置,那么这些地方做什么用途,怎么装修呢。这里就是格式化建立文件系统
/dev/sda1 用来做办公室使用, 装修风格采用ext4 叫办公室或者1
/dev/sda2 用来做前台使用, 装修风格采用ext4 叫前台或者2
/dev/sd3 用来做客房使用, 装修风格采用ext4 叫客房或者3
/dev/sd4 用来做休息区使用。 装修风格采用swap 叫客房或者4
这里我们的装修风格可以有多种。
当然叫什么你只能保证你的酒店不会重复,并不会保证和别人不会冲突。
分区+格式化就是这么个道理,接着我们就可以在里面放些家具水电开通(装系统),我们就可以开门接客了(存储数据了)。

3、挂载
就是挂个牌子,好让人找到这些房间从哪里进去。
dev/sda1 用来做办公室使用,挂个牌子/
/dev/sda2 用来做前台使用, 挂个牌子/boot
/dev/sd3 用来做客房使用, 挂个牌子/home
/dev/sd4 用来做休息区使用。挂个牌子/swap

好,废话说这么多。

文件系统,基本操作对象就是文件,怎么知道一个磁盘文件存放在哪里呢,这里就需要数据库表格支持,

inode:表示可以建立多少个文件,inode会有个索引表。inode table
block:表示有多少个block的空间,单位可以是1K,2K,4KByte。
bitmap 通过0和1对应inode和block数,0表示可用,1表示已用。

我们从磁盘上找一个文件就是去各个分区去找inode table找到对应的文件。inode table和block table都是分区内唯一的。
有日志功能的文件通ext4,就是有个journal的区域给其使用,当用户在对数据进行写操作,就会把inode table 中的文件的inode放到这里,然后执行完毕后再放回到inode table,如果内存处理没有完成,比如断电等其他操作,inode就没有重新放到inode table原来里面,这个时候就会存档在journal区域中,定期去检查这个区域中的,策略为mount 多次,或者运行多久,如果通过inode检查block有问题,就会标记这个inode和block为0,从而释放空间。
因为分区中block数量太多,因此就有block group的概念,来分组进行管理。这些组的起始位置和基本信息就会存放在分区中的superblock上,superlock会多点进行备份。如果丢失了superblock 中的信息就会不知道哪里去找数据。
简单来说我们找文件
找inode table 找到inode 根据inode 中的其他指针等知道block 位置,去superblock 找block在哪些位置,然后移动head去读取sector。

一块硬盘上可以有好多分区,每个分区可以有不同的文件系统,那么如何让系统能够识别不同的文件系统呢,不同的文件系统都有一个标识id好,比如linux的为83,linux lvm为8e,不同的文件系统我们可以理解为不同的语言,如何让一个人只会汉语的人,听懂英语,俄语,德语,法语呢,我们需要以个中间层的翻译,就是VFS,(Vitural File System),它会帮kernel去翻译。那么linux可不可以支持windwos的NTFS呢,理论上你要让VFS能翻译就行。
不同的文件系统就是,按名读取文件,处理磁盘文件的不同方式而已,数据都是01的二进制数据,如何组织起来是一回事,如快递公司,都是发快递,京东,三通一顺丰都是发快递,但是有的快,有的好,有的就想打人的。当然对于文件系统没有谁最好,只有合适的,比如顺丰快,但是贵啊,你不急没必要对不对,比如京东的当天到次日达的功能,他要收额外的快递费,所以要看你的需求需不需要这个功能,统一到你这边是通过代收点的,我们不管什么快递,你放到代收点我去取,同样我也是把东西拿到快递点去寄。就像xfs支持单个单文件,Relserfs对海量小文件支持较好。
快递按功能划分,我们可以分普通快递,货运,国际快递等。
文件系统分为,基本文件系统,集群文件系统,分布式文件系统,网络文件系统,光盘文件系统等。

还有裸系统raw就像我们去实体店买东西并不从网上买发快递,快速直接。但是懒得不想去实体店呢。

分区时指定的system id 使用来干嘛的,默认是83.是用来标识在这个分区设备上将运行的系统的文件系统类别是什么,这里是大的类别不是精细划分。方便应用程序虽然可以通过vfs知道下面说的是什么,但是必要的时候我们知道对面坐的是说德语的还是汉语,至于你说汉语里的那个家乡话管了。
磁盘及文件系统管理_学习笔记

inode 的size和block 的size决定了一个文件系统最大能够支持的单个文件容量。

分区工具:

我们经常听到分区4K对齐,其实这个是针对ssd来说的,因为ssd速度很快,如果文件系统划分使用的block是4k,一次读取8个sector,默认sector大小是512Bytes的话,我们因为快,一次读取8个就会很快。
但是如果不对齐的话就乱了,所以现在操作系统windows10在安装时候会帮你4k对齐的。
那么在linux下,ext4默认是2k对齐。当然不知道是不是检测到我划分的是scsi磁盘。所以这样,或者说mkfs.ext4默认的2k,
centos7上xfs系统,默认也是2k对齐。
fdisk(针对MBR分区格式的磁盘进行操作)
增删改查
增加
n:添加分区
删除
d:删除分区
修改:
t:修改分区的system id,可以为fd(raid),8e(lvm),
我现在还没有明白这个含义是什么。

查看:
-l:
-u:以扇区大小来显示,
p:显示分区

gdisk(针对GPT分区格式的磁盘进行操作)

格式化文件系统工具

上一篇:使用jsoncpp封装的Json序列化和反序列化的工具类


下一篇:Mysql学习之--卸载源码mysql-5.6安装mysql-5.5