主机规划与磁盘分区
linux的EXT文件系统
基础:磁盘的物理组成
(1) 圆形的盘片,主要用于记录数据
(2)机械手臂和其上的磁头(用于读写盘片上的数据)
(3)主轴马达,可以转动盘片,让磁头在其上面读写数据
(4)扇区:最小的物理存储单位,每个扇区512bytes
(5)柱面,将扇区组成一个圆,那就示一个柱面,柱面示分区的最小物理单位,磁盘分区是告诉操作系统我这块磁盘在此分区可以访问的区域示由a柱面到b柱面之间的
块。第一个扇区很重要,里面有硬盘主引导记录(MBR)以及分区表,其中MBR占446bytes,而分区表占64bytes
(6)/dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash等接口的磁盘文件名,/dev/hd[a-d][1-63]:为IDE接口的磁盘文件名
由于分区表只有64bytes,只能记录四条分区的记录,这四条称为主分区或扩展分区,其中扩展分区还可以分出逻辑分区
(1)主分区与扩展分区最多可以有4个(硬盘的限制)
(2)扩展分区最多只能有一个(操作系统的限制)
(3)扩展分区可以再分出逻辑分区,能够被格式化做为数据访问为主分区和逻辑分区,扩展分区无法被格式化。
(4)逻辑分区的数量依操作系统而不同,在linux系统中,IDE硬盘最多有59个逻辑分区(5号到63号),SATA硬盘则有11个逻辑分区(5号到15号)
文件系统
传统的文件系统只能中,一个分区就是只能被格式化一个文件系统,可以说一个文件系统就是一个分区,但是随着新技术的应用,可以将一个分区格式化多个文件系 统,也能够将多个分区合成一个文件系统(LVM,RAID),所以现在称呼一个可被挂载的数据为一个文件系统,而不是分区。
一个文件的数据处理文件的实际内容以外,还包括文件的很多自有属性。文件系统会将这两部分的数据分别存放在不同的块,文件的权限信息放置到inode块 中,而实际内容则放置到data block中,同时还有一个super block会记录文件系统的总体信息(dumpe2fs 查询)。
在整体的规划中,文件系统最前面有一个启动扇区,这个启动扇区可以安装引导程序,这样就能够将不同的引导程序安装在个别的文件系统前端,而不是硬盘的唯一MBR,这样可以制作多重引导
文件系统区域划分
(1)data block数据块,用于存放文件实际数据,ext2文件系统中block大小有1k,2k,4k三种,每个block在格式化后都有编号,以方便inode的记录,一个文件可能占用多个block
(2)inode表,主要记录文件的属性,以及该文件存放的block中,属性一般有:rwx访问模式,owner/group信息,大小,时间 (mtime,ctime,atime),文件特性标志(SetUID),文件真正数据的指向。inode在格式化的时候大小已经固定为128bytes 了,文件很大时,占的block比较多,inode会根据索引记录来进行文件的block查找。
(3)super block记录整个文件系统的信息,主要有 block与inode的总量,未使用的和已使用的inode/block的总量,block与inode的大小,文件系统的挂载时间,最近一次写入数据 的时间,最近一次磁盘检查的时间(fsck),一个alidbit值,表示文件系统是否被挂载,0为未挂载,反之为1
(4)File system Description 文件系统描述说明,与block group有关的信息
(5)block bitmap,类似在电影院订位置一样,记录哪些数据block已经被占用,哪些没有使用
(6)inode bitmap,记录那些inode被占用,哪些没有
dumpe2fs命令:
dumpe2fs [-bh] 设备文件名
b:列出保留为坏道的部分,h:仅列出superblock的数据
目录与文件
linux系统中,目录也是一个文件,新建目录页会至少分配一个inode和block,inode记录该目录的属性权限等信息,而block记录该目录里的 文件的文件名以及inode号码。
所以当通过ls-l来查看目录时,其大小一般都示一个block大小的整数倍。
文件的建立也一样,根据文件大小来分配block数量和inode。
文件的读取流程
给定一个绝度路径来进行文件的读取,首先会进入其顶层目录,查询是否有足够的权限,如果满足,则查询其block数据,里面包含着下级目录的目录名,和 inode号,读取下级inode信息,看是否满足权限等条件,满足则再次进入下级,依次类推,直到读取到文件
由于文件的新建,修改,删除等也会同步的修改inode table和block table的信息,但是由于一些一场情况,例如断电,导致这种不一致的状态,为了避免这种情况发生,引入了日志文件系统,文件信息修改前写入日志,结束后 再记录,这样就知道哪些不一致的情况了,Ext3文件系统就引入了这样的日志文件系统
文件系统的挂载
将文件系统与目录树结合的操作称为挂载,文件系统要链接到目录树,才能进行访问,这个目录就是该文件系统的入口,这个目录就叫挂载点
除了linux标准的文件系统ext2,linux还支持很多的文件系统,如FAT,NTFS,iso9660(光盘)等,但是我们访问文件系统,所有操 作都是通用的,并没有指定访问具体是那个类型的文件系统,这就算VFS(Virtual Filesystem Switch)发挥的作用。VFS会主动帮我们做好访问的工作,具体操作对我们是透明的
文件系统基本操作
df [-ahikHtm] 目录或文件名
列出文件系统的整体磁盘使用量信息
a列出所有文件系统信息
k以KB的容量显示 m MB
h以易阅读的方式呈现
i不用硬盘容量,以inode的数量呈现
T列出该分区的文件系统名
du [-ahskm] 文件或目录名称
评估文件系统的磁盘使用量,常用于评估目录所占容量
s仅列出总量
h以易阅读的方式呈现
k m 同上df
du -sh * | grep G
ln链接文件
hard link文件,一个文件内容只能对应一个inode号,文件系统是根据inode来进行文件访问的,而文件名只与目录有关,多个不同的文件名可以对应同一 个inode号,这就是硬连接,所以,hard link只是目录下新建一条文件名来对应到某个inode号码而已。 通过ls-i可以查询多少个文件对应到该inode下
symbolic link文件,symbolic是新建了一个文件,会分配inode号和block块,只不过其block的数据信息是指向的另外一个文件,这就是软连 接,不同与硬连接,因为它会分配新的inode,是一个新的文件,文件的大小是指向的文件位置的字符串长度
ln [-sf] 源文件 目标文件
ln [-sf] existfile newlinkfile
默认示建立硬连接文件,-s表示建立symbolic连接
f 如果目标文件存在,就删除后再创建
磁盘的分区,格式化,检验,挂载
fdisk -l 设备名称
-l 输出后面的设备所有分区内容
fdisk输入后,会进入交互式的界面,一步步引导你分区结束,所有的操作最初保存在内存中,只有主动保存了分区内容,才会生效
mkfs [-t 文件系统格式] 设备文件名
mkfs -t ext3 /dev/hdc6 格式化该分区为ext3文件系统
mke2fs 很繁杂的命令有很多,不过功能很强大
mke2fs [-b block 大小] [-i block大小] [-L 卷标] [-cj] 设备
b 设置每个block的大小
i多少容量给与一个inode
c检查磁盘错误,仅下达一次-c时,会快速测试读写,-c -c的话,会测试读写
L设置卷标名称
j加上j后,会主动加入日志系统而称为ext3
fsck [-t 文件系统] [-ACay] 设备名称
进行文件系统的检查
A依据/etc/fstab的配置,将需要的设备扫描
a自动修复扇区
y和a类似
C检查过程中显示进度
t设置文件系统格式,但是一般会读取super block的数据自动判断
f强制检查
badblocks [-svw] 设备名称
检查硬盘扇区是否有坏道的
s显示进度
w使用写入的方式来测试
磁盘挂载与卸载
注意:作为挂载点的目录理论上应该都是空目录,单一目录不应重复挂载多个文件系统,单一文件系统不应被挂载在不同的挂载点
mount -a
依照/etc/fstab配置,将多有未挂载的磁盘都挂载上来
mount -l 会显示label信息
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 设备文件名 挂载点
-n默认系统会将挂载信息写入/etc/mtab中,如果刻意不写则使用n
-L除了用设备名挂载,还可以用卷标进行挂载
-o额外参数,比如帐号,密码,读写权限等
ro,rw只读或只写
sync,async同步写入或异步的内存机制
auto noauto
dev nodev是否允许创建设备文件
exec noexec 是否允许有可执行文件
user nouser是否允许在该分区下任何用户执行mount
defaults 使用默认值
remount 重新挂载,在系统出错时很有用
mount -o remount,rw,auto / 重新挂载根目录
unmount [-fn] 设备文件名或挂载点
f强制卸载
n不更新/etc/mtab
磁盘参数的修改
mknod 设备文件名 [bcp] [Major] [Minor]
b修改设备名称为一个外部存储文件
c设为外部输入设备文件
f设置设备为FIFO文件
主设备代码 从设备代码
e2label 设备名称 新的Label 名称
修改卷标
tune2fs修改很多参数 具体查看文档
tune2fs [-jlL] 设备代号
l 类似dumpe2fs 读取super block
j 将ext2转化为ext3
L修改设备卷标
tune2fs -l /dev/hdc6
hdparm 设置IDE接口的高级参数
hsparm [-icdmXTt] 设备名称
设置开机挂载
修改/etc/fstab文件
进入此文件,默认的属性从左到右依次是:
Device MountPoint filesystem parameters dump fsck
特殊设备loop挂载(镜像文件不挂载就使用)
mount -o loop /test.iso /mnt/mountpoint
制作大文件,然后将其格式化,然后挂载,类似多了个分区
dd if=/dev/zero of=/home/test bs=1M count=512
mkfs -t ext3 /home/test
mount -o loop /home/test /media/cdrom
创建新文件,格式化,挂载
内存交换空间(swap)的创建
(1)新进行分区,假设分好了 分区为/dev/hdc7
(2)mkswap /dev/hdc7 将此分区设为swap空间 可用free命令查看内存使用情况
(3)swapon /dev/hdc7 开启swap空间
swapon -s 列出目前使用的swap设备有哪些
也可使用文件来构建swap,新创建个新文件,mkswap file 然后swapon file
swapoff关闭交换空间 swapoff /dev/hdc7 swapoff file
启动扇区与super block
启动扇区永远在文件系统的最前面的1025bytes的区域,如果block大小是1k,那么启动扇区在super block之前的区域,如果 block为2k或4k,则启动扇区在super block内的前1024bytes中
fdisk无法支持高于2TB以上的分区,可以使用GNU的parted进行分区行为