1.Linux的Ext2文件系统(inode)
在整体规划当中,文件系统最前面有一个启动扇区,可以安装引导装载程序。
若每个block大小为1k,则引导装载程序和super block各占一个block。若每个block大小为2k或4k则两者在同一个block中。
date block(数据块)
用来放置文件内容的地方,在Ext2文件系统中支持的大小有1KB,2KB及4KB三种而已。
原则上,block的大小与数量再格式化完就不能再改变了(除非重新格式化);
每个block中最多放置一个文件的内容;
承上,如果文件大于一个block的大小,则一个文件会占用多个block;
承上,如果一个文件小于一个block的大小,则多余的部分就不能再使用了,(磁盘空间会浪费);
平时所说的碎片整理的原因即是文件写入的block太过离散,文件的读取性变得很差,而碎片整理则是将同一个文件所属的block汇合在一起。
inodetable(inode表格)
inode记录的基本数据有:
该文件的访问模式(r/w/x);
该文件的所有者与组(owner/group)
该文件的大小;
该文件创建或状态改变的时间(ctime);
最近一次的读取时间(atime);
最近修改的时间(mtime);
定义文件特性的标志(flag),如SetUID等;
该文件真正内容的指向(pointer);
其他特性:
一个inode仅有12个指向,当不足以存储文件信息时,将自动申请一个block继续存储;
每个inode的大小均固定为128bytes;
每个文件都会仅占用一个inode而已;
承上,因此文件系统能够创建文件的数量与inode的数量有关;
系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block内容。
Superblock(超级块)
记录的主要内容:
block与inode的总量;
未使用与已使用的inode/block数量;
block/inode的大小(1K,2K,4K\ 128bytes);
文件系统的挂载时间,最近一次写入数据的时间,最近一次检查磁盘的时间等文件系统的相关信息;
一个validbit数值,若此文件系统已被挂载,则该值为0,否则为1。
查看文件系统的相关信息:dumpe2fs
2.文件系统的简单操作
磁盘与目录的容量:df,du
df:列出文件系统的整体磁盘使用量;
du:评估文件系统的磁盘使用量(常用于评估目录所占容量)。
df -h:以人们易阅读的GB,MB,KB等格式自行显示。
df -i:不显示硬盘容量而以inode的数量来显示;
du -s:只列出总量。(与df不同,在文件系统内查找所有文件数据)
连接文件:ln
hard link(硬连接或实际连接):新建一个文件,与原文件共用一个inode,因此这两个文件除了文件名之外其他相关信息完全相同。(ln)
symbolic link(符号连接,即windows的快捷方式):新建一个文件,文件内容为原文件的“文件名”。(ln -s)
3.磁盘的分区,格式化,检验与挂载:
磁盘分区:(磁盘小于2T时使用fdisk即可,若大于,则可用使用parted程序)fdisk +文件系统名(用df查看)
d 删除一个分区 n新增一个分区 p 在屏幕上显示分区表 q 不保存,离开fdisk程序 w 保存并离开fdisk
磁盘格式化:mkfs -t 文件系统格式 设备文件名
磁盘检验:fsck,badblocks
磁盘挂载与卸载fsck -t 文件系统 [-ACay]设备名称(root权限且文件系统有问题时才使用这个命令,正常状况下使用可能造成对系统的危害)
badblocks [-swv] 设备名称 (检查硬盘扇区有没有坏轨,因为用mke2fs -c格式化时处理磁盘表明的读取测试,所以不常用)
重新挂载根目录与不特定目录单一文件系统不应该被重复挂载在不同的挂载点中;
单一目录不应该重复挂载多个文件系统;
作为挂载点的目录理论上应该是空目录(若非空,原文件将被隐藏,但卸载后会恢复)
mount -a 将按照配置文件/etc/fstab的数据把所有未挂载的磁盘都挂载上来。
mount -l 单纯输入mount会显示目前挂载的信息,加上-l可增列label名称
mount -t 与mkfs的参数类似,可以加上文件系统的种类来指定欲挂载的类型.
将一个目录挂载到另一个目录整个目录树中根目录最为重要,因此根目录是不能被卸载的,那么当要改变挂载参数或根目录出现“只读”状态时,如何重新挂载呢?最简单的就是重新启动了,但也可以用mount -o remount,rw,auto/(重新挂载并加入rw和auto参数)
磁盘参数修改mkdir /mnt/home
mount --bind /home /mnt/home
即进入/mnt/home就是进入/home
umount(将设备文件卸载)
umount [-fn] 设备文件名或挂载点
-f:强制卸载,可用在类似网络文件系统(NFS)无法读取到的情况下;
-n:不更新/etc/mtab的情况下。
mknod
创建设备文件
mknod 设备文件名 [bcp] [Major] [Minor]
b:设置设备名称成为一个外部存储设备文件,例如硬盘等;
c: 设置设备名称成为一个外部输入设备文件,例如鼠标/键盘等;
p:设置设备名称成为一个FIFO文件。
Linux下的所有设备都以文件来代表,那么那个文件如何代表该设备呢?就是通过文件的major和minor数值来代替。
常见的硬盘文件名/dev/sda与/dev/had设备代码如下:
磁盘文件名 | Major | Minor |
/dev/hda | 3 | 0~63 |
/dev/hdb | 3 | 64~127 |
/dev/sda | 8 | 0~15 |
/dev/sdb | 8 | 16~31 |
e2label
当格式化完毕后想要修改卷标则使用该命令。
使用卷标进行相关操作是有什么优缺点呢?
优点:无论磁盘文件名怎么改变,无论你将硬盘插在哪个IDE/SATA接口。由于系统是通过Label,所以磁盘插在那个接口将不会有影响。
缺点:如果插了两块磁盘,刚好两块磁盘的Label有重复的,那么系统可能会无法判断哪个磁盘分区才是正确的。
e2label 设备名称 新的Label名称(可用dumpe2fs查看当前目录系统的状态)
tune2fs [-jlL]
-l:类似dumpe2fs-h的功能,将super block内的数据读出来
-j:将ext2的文件系统转换为ext3文件系统
-L:类似tune2fs的功能,可以修改文件系统的卷标
4.设置开机挂载
开机挂载/etc/fstab和/etc/mtab
特殊设备loop挂载(镜像文件不了刻录就挂载使用)根目录必须挂载,且一定要优先于其他mount point被挂载进来
其他挂载点必须为已新建的目录,可以任意指定,但一定要遵守必需的系统目录架构原则
所有挂载点在同一时间内只能挂载一次
所有分区在同一时间内只能挂载一次
如若进行卸载,你必须先将工作目录移到挂载点(及其子目录)以外
若要将/dev/sda6每次开机都自动挂载到/mnt/sda6,该如何进行?
(1)nano/etc/fstab
将 /dev/sda6 /mnt/sda6ext3 defaults 1 2写入fstab
/*
第五个数据,即1,表示每天进行dump备份操作,,若不需要则写0.
第六个数据,即2,表示以fsck检验扇区,若不需要则写0,1表示需要较早检验
*/
(2)检测/dev/sda6是否已被挂载,若挂载过,则必须先卸载
(3)测试写入的/etc/fstab有没有语法错误
mount -a
df
最终看到/dev/sda6被挂载起来的信息才是成功了
/etc/fstab是开机时的配置文件,实际文件系统的挂载是记录到/etc/mtab和/proc/mounts这两个文件夹当中。
挂载光盘/DVD镜像文件
mount -o loop 镜像文件名称 挂载点
使用ll 挂载点即可查看镜像文件的内容
新建大文件以制作loop设备文件
制作出一个大文件,将其格式化后挂载,它便类似于一个额外的分区,使用这种方法可以解决分区不良的情况。
dd if=/dev/zero of=/home/loopdev bs=1M count=512
512+0 records in<==读入512条数据
512+0 records out<==输出512条数据
命令中 if 是input file,输入文件。/dev/zero是一个会一直输出0的设备
of是output file,将一堆0写入后面接的文件中
bs是每个block 的大小,就像文件系统那样的block
count是总共几个bs的意思
mkfs -t ext3/home/loopdev(格式化)
mount -o loop/home/loopdev /media/cdrom/(挂载)
内存交换空间(swap)的构建 (内存较大的计算机基本上用不到swap,大多用于服务器或工作站)
1.使用物理分区构建swap
分区:先使用fdisk在磁盘中分出一个分区给系统作为swap。(退出后需要partprobe,重新加载分区表)
格式化:利用新建swap格式的“mkswap 设备文件名”就能够格式化该分区成为swap格式。
使用:最后将该分区启动,方法为“swapon设备文件名”
查看:最终通过free这个命令来查看一下内存的使用情况
2.使用文件构建swap
使用dd命令新增一个文件,用mkswap 将文件格式化为swap,使用swapon启动。