学习资源来自:www.magedu.com
学习记录过程中难免出现错误,如有发现,还望大神们指出。
示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行。示例仅供参考(练习题在附录)。
这一部分内容以磁盘的创建分区、创建文件系统、挂载分区为主线,其中参杂了与之相关的其它知识,对于初学者(像我这样),需要在文字的基础上结合实例操作以及练习才能大概将这部分知识梳理一遍,内容有点杂乱(因为这个框比较大...),需要耐心的看,应该还是可以看懂的,还望大神们传授一些编排技巧。示例不少,并且也加了适当的注释,操作过程中根据命令执行结果与注释大体就能理解了。
磁盘及文件系统管理详解
磁盘管理:
机械式硬盘:U盘、光盘、软盘、硬件、磁带
磁盘组成结构:盘片(双面可读写),磁臂,磁头(悬浮在盘面上方,改变磁性材料状态)
相关概念:
磁道:盘片划分成许多用于存储信息的圆环、这些圆环就是磁道,由于磁盘转动的角速度固定,
因此磁道越靠外,存储的信息越多、读写速率越高,所以频繁使用的数据一般放在最外面的磁道上。
扇区:存储用户数据,扇区编号...,扇区一般为512字节
数据存储:存储数据时所有盘面同时工作,将数据分成多份,按照磁道实现数据存储,
柱面:位于不同盘面上相同编号的磁道组成柱面(Cylinder)
分区(Partition):分区是磁盘的逻辑边界,实现创建多个独立的文件系统,磁盘分区是按照柱面分的。
磁盘的读写延迟(读取数据时磁头转移到另一个磁道上至取得信息所经过的时间):
平均寻道时间(是磁盘的重要性能指标)
一般笔记本:5400RPM(转/分钟) 普通台式机7200RPM(转/分钟)
磁盘大体需要经过哪些过程才能使用:(具体过程请看下文)
低级格式化 --> 分区(fdisk) --> 创建文件系统(格式化)(mkfs)
--> 将分区挂载至根分区中(mount|mkswap) --> 通过挂载点使用|swapon
格式化:磁盘出厂时厂商会进行一次低级格式化――划分磁道、扇区等,以及高级格式化――创建文件系统
磁盘中的重要存储空间:MBR
MBR(Main Boot Record):主引导记录(512byte)―― 早期,磁盘0盘面0磁道0扇区一共512个字节
MBR属于磁盘、独立于操作系统之外、全局的存储空间,划分为三个片段:
446bytes:BootLoader,引导加载器,本质是一个程序,引导启动某个分区上的操作系统
64bytes:分区表――最多可划分4个主分区(主分区+扩展分区 <= 4)
16bytes:每16bytes标识一个分区
2bytes:魔数(Magic Number)
用特定的数字标记MBR是否有效
MBR中的BootLoader是启动操作系统的重中之重,如果MBR损坏,那么不管硬盘上是否安装操作系统,
以及安装的是什么操作系统,都无法启动。
创建分区后,要实现按名存取文件,快速存取文件,需要创建一个文件系统
文件系统(以ext2为例):元数据存储区,数据存储区
元数据存储区:Inode条目,块位图――每一个块对应一个位。
Inode条目:Inode号、每一个文件的属主属组,扩展属性、权限、大小、时间戳等各种各种元数据,
与文件数据没有关系的信息(没有文件名)
块位图(bitmap)(0|1):标识条目是否使用――条目对应的块位图
标识磁盘块是否使用――磁盘块对应的块位图
数据存储区:由划分成大小固定的磁盘块(逻辑存储单元)组成
块大小(block size)常见类型有1024(1k),2048(2k),4096(4k)―― 默认大小,
cpu访问数据需要将数据装载至内存,内存中空间一般叫页面|页框,大小一般是4k(装载磁盘块)
占据磁盘块的文件通常只有普通文件和目录文件两类,
符号链接、套接字等特殊文件一般不占用磁盘块。
目录(路径映射表――文件名称和Inode的对应关系):
文件名保存在目录中,目录本身也是个文件存储于磁盘块中。
所有路径都挂载在根目录下,根目录是自引用的,linux内核可以获得根目录的Inode
目录构成:inode号,文件名长度、文件名类型、文件名... ―― dentry(目录项|目录条目)
文件系统下的操作:
创建文件(以/backup/test.txt为例)
1、在原数据区分配一个新的Inode
2、根据自引用得到根目录Inode号,找到对应的磁盘块 ,取得backup对应的Inode号
3、根据对应的Inode号找到backup目录对应的磁盘块
3、在backup磁盘块添加文件名test.txt及先前为其分配的Inode号
4、在对应Inode号下为新文件分配磁盘块(一般会分配比较多――减少磁盘碎片)
5、存储完数据后将多余的磁盘块重新标记为空
删除文件
只需将对应目录下的文件名删除,将Inode号标记为空,不用删除文件内容
复制
即创建一个新文件
剪切
分区内剪切:只需修改Inode路径即可
分区外剪切:即创建新文件(复制文件)、删除原磁盘块文件(删除文件)的过程
实际文件系统组成(ext2):将整个磁盘分区划分成一个预留的引导块(Boot Block)-(存储操作
系统引导信息)以及N个组(逻辑组 ―― 块组(block group))。
每个块组包含:超级块(super block)|全局描述信息(存储全局信息――当前分区一共有多少块组,
每个块组一共有多少块,块大小,空闲磁盘块,已用磁盘块,空闲Inode,已用Inode),
块组描述符表(GDT)(当前系统上一共有多少块组,每一个块组从第几个块开始、到第
几个块结束...),每一个块组对应的Inode表,以及Inode位图、块位图...超级块和块组
描述信息表都有多份备份。概念与上述一样。
ext3:日志文件系统 ―― journal file system
除了ext2中的元数据存储区和数据存储区外,还有第三个数据区域(日志区)
存储、修改文件时先将Inode创建到日志区,数据存储完成后将日志区中的数据存储到元数据区中。
如果存储过程中出现故障,只需检查日志区中的Inode,即可快速查找到故障位置进行文件系统修复。
日志文件最大的好处是加快文件系统修复速度,缺陷是多了次写操作,速度比较慢。
根分区:一个分区就是一个独立的文件系统,物理上每个分区是并行的,逻辑上根文件系统与其它
文件系统是有上下级之分的,其它文件系统最终都要归并到根目录下(挂载),根下的所
有文件在一个分区上,而根下的部分目录文件可以关联到其它分区上(即是另一个分区的
访问入口)。
特殊文件:
链接文件
硬链接:指向同一个inode的不同路径,彼此之间称作硬链接
因此只有当硬链接个数小于1才能被删除,否则只是删除一个路径
符号链接(大小为字符个数):存储指向另一个文件的路径
创建链接:ln [-s -v] SRC DEST
硬链接:
1、只能对文件创建,不能应用于目录(避免循环链接);
2、不能跨文件系统(可以在不同目录下);
3、创建硬链接会增加文件被链接的次数;
符号链接:(一般存储与Inode中,不占用磁盘块)
1、可应用于目录;
2、可以跨文件系统;
3、不会增加被链接文件的链接次数;
4、其大小为指定的路径所包含的字符个数;
设备文件:(一般存储与Inode中,不占用磁盘块)
b: 按块为单位,随机访问的设备;(硬盘)
c:按字符为单位,线性设备;(键盘)
/dev(没有大小,有主设备号、次设备号)
主设备号 (major number) (设备入口)
标识设备类型
次设备号 (minor number)
标识同一种类型中不同设备
创建设备文件:mknod
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
-m MODE ―― 指定权限
(不要轻易的向一个设备发送文件)
系统如何标志硬盘(硬盘设备的识别、命名):
IDE, ATA:hd ―― 并口类型
SATA:sd ―― 串口类型
SCSI: sd
USB: sd
同一种类型下的硬盘,如果有多块,用a,b,c,...来区别同一种类型下的不同设备
IDE:一般pc机的主板上只有两个IDE接口,每一个IDE口可以接两块盘。
第一个IDE口(IDE控制器):主盘、从盘
/dev/hda, /dev/hdb
第二个IDE口:主盘、从盘
/dev/hdc, /dev/hdd
同一块硬盘上可以有多个分区,不同的分区有不同编号(以hda为例说明):
hda: (逻辑分区可以有多个,主分区最多四个,扩展分区只能有一个)
hda1: 第一个主分区|扩展分区
hda2: 第二个主分区|扩展分区
hda3: 第三个主分区|扩展分区
hda4: 第四个主分区|扩展分区
hda5: 第一个逻辑分区
hda6:第二个逻辑分区
硬盘的容量=主分区的容量+扩展分区的容量
扩展分区的容量=各个逻辑分区的容量之和
查看当前系统识别了几块硬盘:
fdisk -l [/dev/to/some_device_file]
Linux支持的文件系统(文件系统属于内核的功能,是内核提供的基本功能)
分区首先需要经过格式化才能使用 ―― 管理文件系统的软件(用户进程)
实现将硬盘的某个分区格式化成内核支持的某种类型的文件系统(高级格式化)
硬盘设备的分区格式化:
低级格式化:创建磁道(厂商)
高级格式化:创建文件系统 ―― mkfs -t ext3 /..
文件系统属于内核的功能,但是创建文件系统,需要用户执行的命令结合内核所支持的功能来完成
文件系统操作:
open
close
create
delete
edit
虚拟文件系统(VFS):virtual filesystem
每一种文件系统至少支持上述这几类操作,但是不同的文件系统针对这些操作的调用接口可能是是不一样
的,VFS弥合各类文件系统的调用方式 ―― 将各类文件系统的不同的文件接口封装成统一的接口
文件系统类型:
win:
FAT32-支持单个文件最大4G
NTFS
CIFS(win网上邻居) - 通用互联网文件系统
光盘:国际标准化组织
ISO9660 - 光盘的数据存储格式
linux:
ext - 扩展的文件系统 (redhat默认文件系统)
ext2
ext3
ext4
xfs (unix)
reiserfs (suse默认的文件系统)
jfs(IBM) - 日志文件系统 (unix)
nfs - 网络文件系统 (unix)
ocfss - 集群文件系统
gfs2 - 全局文件系统
vfat(FAT32)
swap - 交换数据文件系统
磁盘管理:
fdisk /dev/sda
p: 显示当前硬件的分区,包括没保存的改动
n: 创建新分区
e: 扩展分区
p: 主分区
d: 删除一个分区
w: 保存退出
q: 不保存退出
t: 修改分区类型
L:
l: 显示所支持的所有类型
du (显示目录及其包含的子文件所占用的空间大小)
-s (显示一个文件系统或者一个目录所占用的整体空间大小)
-h (做单位换算)
示例:
cd
du /backup
du -s /backup
du -sh /backup
df: 显示整个磁盘分区的使用情况
-i:显示inode使用情况
-h:单位换算
-P:不换行显示
示例:
df
df -h
df -i
df -P -i
df -P
cat /proc/partitions : 查看分区
partprobe : 通知内核重读分区表
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
文件系统管理
创建文件系统管理(重新创建文件系统会损坏原有文件):
mkfs: make file system
-t FSTYPE ―― 指定文件系统类型 以及指定分区
-t可省略,格式如下:
mkfs -t ext2 /dev/sda5 = mkfs.ext2 /dev/sda5
mkfs -t ext3 /dev/sda5 = mkfs.ext3 /dev/sda5
cat /proc/filesystems 查看当前内核所支持的文件系统类型
专门管理ext系列文件系统的命令:
mke2fs
-j: 创建ext3类型文件系统
-b BLOCK_SIZE: 指定块大小,默认为4096;可用取值为1024、2048或4096;
-L LABEL:指定分区卷标;(分区的名称)
-m #: 指定预留给超级用户的块数百分比(默认为5%)
-i #: 用于指定为多少字节的空间创建一个inode,默认8192(这里给出的数值应该为块大小的2^n倍)
-N #: 指定要创建的inode个数;
-F: 强制创建文件系统;
-E: 用于指定额外的文件系统属性;
blkid: 查询或查看磁盘设备的相关属性
UUID
TYPE
LABEL
e2label: 用于查看或定义卷标
e2label 设备文件 ―― 查看卷标
e2label 设备文件 卷标 ―― 设定卷标
tune2fs: 调整文件系统的相关属性
-j: 不损坏原有数据,将ext2升级为ext3;
-L LABEL: 设定或修改卷标;
-m #: 调整预留百分比;
-r #: 指定预留块数;
-o: 设定默认挂载选项;
acl
-c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;
-i #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;
-l: 显示超级块中的信息;
dumpe2fs: 显示文件系统属性信息
-h: 只显示超级块中的信息
fsck: 检查并修复Linux文件系统
-t FSTYPE: 指定修复的文件系统类型
-a: 自动修复(不询问用户,自动完成修复)
e2fsck: 专用于修复ext2/ext3文件系统
-f: 强制检查;
-p: 自动修复;
分区的使用需要挂载:
挂载:将新的文件系统关联至当前根文件系统,通过挂载点访问对应文件系统上的文件;
卸载:将某文件系统与当前根文件系统的关联关系移除;
挂载:
mount 设备 挂载点
指定设备的方式:
1、设备文件:/dev/sda5
2、卷标:LABEL=“”
3、UUID: UUID=“”
挂载点:目录
要求:
1、此目录没有被其它进程使用;
2、目录得事先存在;
3、目录中的原有文件暂时隐藏;
mount: 显示当前系统已经挂载的设备及挂载点
mount [options] [-o options] DEVICE MOUNT_POINT
-a: 表示挂载/etc/fstab文件中定义的所有文件系统
-n: 默认情况下,mount命令每挂载一个设备,都会把挂载的设备信息保存至/etc/mtab文件;
使用―n选项意味着挂载设备时,不把信息写入此文件;
-t FSTYPE: 指定挂载设备的文件系统的类型;
不使用此选项时,mount会调用blkid命令自动获取对应文件系统的类型;
-r: 只读挂载,挂载光盘时常用此选项
-w: 只写挂载
-o: 指定额外的挂载选项,也即指定文件系统启用的属性;
remount: 重新挂载当前文件系统
ro: 挂载为只读
rw: 读写挂载
...
卸载:
umount: 卸载某文件系统
卸载方式:
1、umount 设备
2、umount 挂载点
卸载注意事项:
将要挂载的设备要求没有进程正在使用;
其他用户访问刚挂载测试的设备,造成测试设备无法卸载时的解决方法:(使用fuser命令)
fuser -km MOUNT_POINT:终止正在访问此挂载点的所有进程
之后就可以卸载设备了
fuser: 验正进程正在使用的文件或套接字文件
-v: 查看某文件上正在运行的进程
-k:终止文件
-m:终止进程
swap分区:交换空间――内存过载使用的应急使用存储空间
因此交换分区一般放在比较靠外的磁道上
free : 查看当前系统上物理内存和交换空间的使用情况
-m ―― 以M为单位显示
创建交换分区前,需要先通过fdisk命令调整分区类型为82(swap);
创建交换分区:
mkswap /dev/sda8
-L LABEL
swapon /dev/sda8 : 启用交换分区sda8中的存储空间
-a : 启用所有定义在/etc/fstab文件中未启用的交换设备
swapoff /dev/sda8 : 关闭交换分区sda8中的存储空间
回环设备(当交换空间不够用时,由回环设备提供应急空间)
loopback, 使用软件来模拟实现硬件
创建文件做模拟的存储空间使用(使用的命令:dd)
dd:复制文件,(dd复制的是底层的数据流,cp则是以文件为单位进行复制)
if=数据来源(input file)
of=数据存储目标(output file)
bs=1(一次复制1个字节)
count=2(一共复制2个bs)
seek=#: 创建数据文件时,跳过的空间大小;
作用:
备份MBR:dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1
还原MBR:dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1
制作磁盘镜像:cat /dev/cdrom > /root/rhe15.iso dd if=/dev/cdrom of=/root/rhe15.iso
创建虚拟镜像文件:dd if=/dev/zero of=/var/swapfile bs=1M count=1024
/dev/zero ―― 泡泡设备,向外吐零
...
mount命令可以挂载iso镜像;
mount DEVICE MOUNT_POINT
-o loop: 挂载本地回环设备
文件系统的配置文件/etc/fstab
操作系统在初始化时,会自动挂载此文件中定义的每个文件系统
mount挂载的任何文件系统,在系统重启后将不复存在
/etc/fstab中存储的内容:
要挂载的设备,挂载点,文件系统类型,挂载选项,
转储频率(每多少天做一次完全备份),文件系统检测次序(只有根可以为1)
其中swap分区的挂载点比较特殊:swap
例如:要让sda5开机自动挂载,则需要在fstab中添加一条数据:
/dev/sda5 /mnt/test ext3 defaults 0 0