一、硬盘结构
1、扇区(sector):是最小的物理存储单位,每个扇区512bytes
2、将扇区围成一个圆,就是柱面(cylinder),是分区(partition)最小单位
3、第一扇区包括:
主引导区(master boot record,mbr):446bytes
分区表(partition table):64bytes,只能记录4条
二、各种接口磁盘在Linux中文件名
1、/dev/sd[a-p][1-15]:SCSI,SATA,USB,Flash随身碟等
2、/dev/hd[a-d][1-63]:IDE接口设备
三、磁盘分区
1、主分区和逻辑分区最多只能有4个(硬盘限制)
2、扩展分区只能有一个(操作系统限制)
3、逻辑分区是有扩展分区分出来的
4、能被格式化的只有逻辑分区和主分区
5、逻辑分区linux系统中IDE可有59个(5-63),SATA可有11(5-15)
四、Linux文件系统
1、inode :存放文件权限和属性,一个文件只有一个,同时记录次档案数据所在的block号码
它包含:
(1)该档案的存取模式(read/write/execute)
(2)拥有者与群组(owner/group)
(3)容量
(4)建立或创建时间(ctime)
(5)最近读取时间(atime)
(6)最近修改时间(mtime)
(7)定义档案特性的旗帜(flag),如:SUID
(8)该档案真正指向的内容block
特点:
(1)inode:文件系统一开始将规划好了inode,block,除非重新格式化或resize2fs命令
(2)每个inode大小为128bytes,记录一个block号码庶4byte
(3)每个档案有且只有一个
(4)因此文件系统能够建立的档案数量与inode有关
(5)系统读取文件时先找到indoe,并分析inode中所记录的权限与用户权限是否相符,然后才读取
(6)一个block只能存放一个文件的数据,如果文件太小,则空着
2、data block: 存放实际数据,可能会占多个
3、superblock : 记录整个文件系统信息,一般1024bytes,用dumpe2fs查看
包括:
(1)inode,block,总量,使用量,剩余量,
(2)block于inode大小(block为1,2,4,indoe为128bytes)
(3)filesystem的挂载时间,最近写入时间,最近效验磁盘(fsck)等
(4)一个valid bit数值,若文件系统已经挂在为0,反之为1
(5)事实上除了第一superblock,后续不一定有,有的话也是对备份
这种文件系统称为:索引式文件系统(indexed allocation)
4、Filesystem Description(文件系统描述)
描述每个block group的开始与结束的block号码,以及说明每个区段(superblock,bitmap,inodemap,data block)分别介于哪一个block号码之间,可以恋情dumpe2fs查看
5、block bitmap(区块对照)
可以查看到那些block是空的
6、inode bitmap(inode 对照表)
为使用的inode号码
事实上:在格式化时将硬盘分成几个区块群组(block group),每个区块都有自己的inode.block,superblock,文件系统的最前端是启动扇区
data block:
Block大小 | 1K | 2K | 4K |
最大单一文件 | 16GB | 256G | 2TB |
最大文件系统容量 | 2T | 8TB | 16TB |
7、目录
一个目录分配一个inode和至少一表block,其中inode记录该目录的相关全乡和属性,并记录分配到那块block号码,而block则记录在这个目录下的文件名与该文件所占的inode号码数据
查看档案所占用inode号码 :ls -li
查看目录:ls -d /bin /boot /proc /lost+found /sbin
文件读取过程:ll -di / /etc /etc/passwd
实例:
dumpe2fs [-bh] 装置文件名
b:列出保留为坏轨的部分
h:仅列出superblock的数据
8、EXT2/EXT3档案存取与日志式文件系统
ext1新增一个档案的步骤:
(1)先确定用户对预增加的目录有没w,x权限
(2)根据inode bitmap找到没有用的inode号码,并将新档案权限/属性写入
(3)根据block bitmap找到没有用的block号码,并将数据写入到block中,且根性inode指向该block号码
(4)将刚刚写入的indoe与block数据同步更新到indoe bitmap和block bitmap中,然后更新superblock内容
一般来说,inode table 和data block称为数据区域,至于superblock,block bitmap,inode bitmap等,等称metadata(中介资料)
如果出问题了可以用e2fsck检查,但是这样太耗时
ext2新增一个档案的步骤:
(1)开始:当系统写入档案时,先在日志记录块中记录某个档案准备写入数据
(2)实际写入:开始写入档案和权限,并更新metadata
(3)结束:完成metadata的更新后,在日志记录块中完成该档案的记录
如果出现问题,可以通过日志找到具体出问题的问位置,做针对性修复,省时
9、异步处理
当一个文件加载到内存中,如果内容没有更改,将文件设定为clean,如果内容被更改,标记为dirty,系统会不定期的将dirty的数据写入到磁盘,可以用sync手动写入
10、挂载
将文件系统与目录结合动作称为挂载
ll -di / /proc : 最顶层inode一般为2,/proc 为1
ll -di / /.. /. :可以看到三个目录是同一个
11、VSF(Virtual Filesystem Switch)
所有的文件系统都是通过VSF访问的,就相当于他封装了底层,你在上面的操作是一样的
查看linux支持那些文件系统:
ll /lib/modules/$(uname -r)/kernel/fs
查看当前已经加载到内存中支持的系统
cat /proc/filesystems
用dumpe2fs 查看
1、首先找到根目录
df
2、dumpe2fs /dev/sda1
五、常用命令
1、磁盘与目录容量
df : 列出文件系统整体磁盘使用量
df [-ahikHTm] 目录或文件名
a:所有文件系统,包括/proc
k:kb
m:mb
h:自动显示合适的格式
H:1000进位
T:连同分区(partition)文件系统(filesystem)名称
i:不用硬盘容量,而以inode数量显示
如:
df -h
df -h /etc :显示/etc下面可用磁盘容量
df -hi
du:评估文件系统使用量(常用在目录上)
du [-ahskm] 档案或名称
a:所有,默认统计目录底下
h:容易阅读方式显示
s:列出总量
S:不包括子目录
k:kb
m:mb
如:
检查根目录底下每个目录所占用容量:du -sm /*
六、实体链接和符号链接
1、Hard Link(实体链接,硬式连结,实际连结)
就是在某个文件夹下增加了一条关联到inode档案
一般来说,设定硬连结时,硬盘空间和inode的数目都不会变,它只是在某个目录的block中多增加一条关联数据,但也有特殊时候,如果恰巧这个block装不下这条数据了,那么就只能在找一个block继续存该条记录
缺点:
不能跨文件系统
不能link目录
创建:
ln /etc/crontab .
cp -l /etc/crontab /tt
2、Symbolic Link(符号链接,快捷方式)
建立一个独立文件,指向link文件名。所以档案删除,该链接就失效了
创建:
ln -s t t2
cp -s t t1
要链接的文件名有多长,则该链接文件就有多大,每个英文1bytes
可以用du -sb; df -i .查看使用量
3、目录链接数量
当新建一个目录时,该目录本身就有两个连接
如:/tmp/test 和 /tmptest/. 是一个目录
上能目录增加1。/tmp/test/..
七、磁盘分割,格式化,效验,挂在
1、一般使用磁盘步骤
(1)对磁盘分区
(2)对分区格式化
(3)如果有必要,对分区效验
(4)在linux上挂载
2、分区
fdisk [-l] 装置名称名称
l : 输出后面装置名称所有分区内容。如果没有装置名称则列出整个系统分区
分区步骤:
1、df / 找到根目录
2、fdisk /dev/sda 进入工作界面
常用命令:
d delete a partition
n add a new partition
p print the partition table
q quit without saving changes
w write table to disk and exit
强制让核心从新捕捉partition table : partprobe
3、磁盘格式化
(1)mkfs(make filesystem)创建文件系统
mkfs [-t 文件系统格式] 装置名称
t : ext3,ext2,vfat
如:mkfs -t ext3 /dev/sda5
(2)mke2fs
b:block大小,目前支持1024,2048,4096
i:inode大小
c:一次快速测试,两次读写测试
L:label名称
j:本来mke2fs是ext2,加上-j会加入journal而成为ext3
如:mke2fs -j -L "test" -i 8192 -b 2048 /dev/sda5
ext3格式,labe等于test,8192bytes分配一个inode,block大小2048bytes
4、fsck,badblocks
(1)fsck,要卸载文件系统
t:类型
A:根据/etc/fstab从新扫描
a:自动修复,不需要按y
y:某些文件系统只支持-y
C:显示进度
f:强制检查
D:针对文件系统下的目录进行优化配置
fsck -C -f -t ext3 /dev/sda5
(2)badblocks
s:进度
v:可以看到进度
w:使用写入测试
八、挂载,卸载
注意:
(1)单一文件系统不应挂在到不同的挂在点
(2)单一目录不应挂在多个文件系统
(3)目录理论上要为空。如果不为空,原来的内容被屏蔽
1、挂载
mount -a
mount [-l]
mount [-t 文件系统] [-L labe] [-o 额外选项] [-n] 装置名称 挂在点
a:根据/etc/fstab的数据将所有未挂在的挂载上
l:并显示label
t:格式,ext2,ext3,vfat,reiserfs,iso9660,nfs,cifs,smbfs,后三种为网络文件类型
n:默认情况下,系统将实际挂在日情况写入/etc/mtab中,反之
L:除了用装置名称挂载还可以用label
/etc/filesystems:系统制定的测试挂在文件系统
/etc/filesystems:linux已经加载的文件系统类型
ls /lib/modules/$(uname -r)/kernel/fs,相关文件系统类型的驱动
如:
mount -l : 挂载详情
mount -t /dev/cdrom /mnt/cdrom
mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash : 指定字符
mount -o remount,rw,auto / :重新挂在根目录
mount --bind /home /mnt/home :挂载目录
使用label挂在:
dumpe2fs -h /dev/hdc6 : 找到label
mount -L "test" /mnt/temp/ : 挂载
label挂载优缺点:
不论磁盘名怎么变,插在那个IDE,STAT接口,都不影响
如果两个label重复就严重了
2、卸载
umount [-fn] 装置或挂载点
f:强制
n:不更新/etc/mtab
查看是否卸载:df,mount -l
注意:如果是目录则一定要是挂载点
3、mknod
4、e2label修改label
e2label 装置名称 新label名
5、tune2fs [-jlL] 装置
l:和dumpe2fs -h ,读取superblock数据
j:ext2装ext3
L:和e2label相同
6、hdparm(IDE硬盘常用)
7、开机挂载
/etc/fstab和/etc/mtab
(1)/必须优先其他目录
(2)挂载点必须先建立好
(3)同一时间挂载点只能挂在一次,分区也是
(4)如要卸载,需要退出目录
fstab文件:
device mount point filesystem parameters dump fsck
装置或label 挂载点 文件系统 参数 备份 检查
参数:
备份:
0不做,1每天,2不定期,通常0,1
检验:
0不检查,1最早检查,2比1晚
8、loop挂载(挂载映像)
9、建立大档案制作loop装置档案
(1)建立大档案
dd if=/dev/zero of=/home/loopdev bs=1M count=512
if : input file,/dev/zero,一直输出0装置
of:output file
bs:block大小
count:建立多少个
(2)建立文件系统
mkfs -t ext3 /home/ren/loopdev
(3)挂载
mount -o loop /home/loopdev /mnt/test
另外参考xen软件
10、交换空间(swap)置换
(1)新增一个分区当作swap
分区:并更改id为82,partprobe
格式化:mkswap /dev/sda6
使用:swapon /dev/sda6
观察:free
(2)大档案
创建大档案:dd if=/dev/zero of=/home/ren/tempswap bs=1M count=512
格式化:mkswap /dev/sda6
使用:swapon /dev/sda6
观察:free
查看当前使用swap分区:swapon -s
关闭swap分区:swapoff /home/ren/tempswap
注意:
(1)在核心2.4.10以后,单一swap没有2gb限制
(2)最多只能32个swap
(3)不能超过系统最大寻址能力
11、磁盘空间浪费(p295)
du -sb /etc
ll -s
12、parted分割磁盘(可用于2T以上)
parted [装置] [指令 [参数]]
新增:mkpart [primary | logical | extended] [ext3 | vfat] 开始 结束
分割表:print
删除:rm [partition]
如:
parted /dev/sda print : 打印分割资料
查看帮助:man parted或parted /dev/sda help mkparted
建立逻辑分区:parted /dev/sda mkpart extended ext3 21.0GB 21.2GB