16.磁盘管理

物理组成

磁柱也是磁盘分割( partition ) 时的最小单位

扇区就是硬盘盘上面的最小储存物理量

这就是磁盘分割的重点:记录每一个分割区的起始与结束磁柱!!

MBR的限制:

仅提供最多四个 partition 的记忆,主分区与扩展分区的最多只能有四个的原因

  

文件系统
每一个 partition 就是一个 Filesystem 
逻辑区块是在 partition 进行 filesystem 的格式化时,所指定的最小储存单位 
一个 Block 最多仅能容纳一个档案,档案大小可能造成的硬盘空间浪费 

ext3文件系统的优化与高级特性 
 磁盘检查 
 磁盘配额 
 自动挂载分区 

-i 2048 inode 2KB 
-b 8192设置block size的大小为8kB 
-f 1024设置fragments的大小为1KB 
mkfs.ext3 –N 2939495  /dev/sdb2 
N 2939495更改inode count。 
 注意: 
-i 最小值是1024,这个值的大小决定inode count的大小 
i=2048 Inode count:1025024 
i=1024 Inode count:2048256  

保留块:为管理员保留的磁盘管理空间,默认为总数据块的5% 

mkfs.ext3  -b 4096 -i 8192 -m 2  /dev/sda2 //设置保留块的数量占总数量的百分之

Tune2fs  --调整ext2/etx3文件系统特性的工具。 

-l <device>                查看文件系统信息 
-c  <count>                设置强制自检的挂载次数 
-i   <n day>               设置强制自检的间隔时间 
-m <percentage>            保留块的百分比 
-j                         将 ext2  文件系统转换成etx3格式 

文件系统检查工具 

fsck  :  检查文件系统数据完整性的工具 
用法一:fsck  -t  ext2  /dev/hda1 
用法二:fsck.ext2   /dev/hda1 
e2fsck   检查ext2/ext3文件系统的工具 

文件系统管理(inode) 

当 partition 被格式化为 ext2 ext3 的文件系统时,他一定会有 inode table 与 block area 这两个区域。  


*  文件系统管理(inode) 
– 目录:  
– 文件:  

*  当 block 大小越小,而 inode 数量越多,则可利用的空间越多,但是大文件写入的效率较差;这种情况适合档案数量多,但是文件容量小的系统

*  当 Block 大小越大,而 inode 数量越少时,大文件写入的效率较佳,但是可能浪费的硬盘空间较多;这种状况则比较适合文件容量较大的系统  

Linux文件系统的运行: 
通常采取异步处理的方式 
当系统读取了某一个档案,则该档案所在的 区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中,若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变,而且在缓冲区当中的区块数据会被标记为” Dirty “,这个时候磁盘实体区块尚未被修正!所以亦即” Dirty “ 表示,这些” Dirty “区块的数据必需回写到磁盘当中,以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。 

查看硬盘或目录的容量  

df 查看已挂载磁盘的总容量、使用容量inode
du 查看档案使用掉的容量有多少? 
语法: df -[ikm]  
参数说明:  

    -i:  使用 i-nodes 显示结果  

    -k:  使用 KBytes 显示结果  

    -m:  使用 MBytes 显示结果  

 说明:这是用来显示目前磁盘空间的指令!  
语法: du [-abckms] [目录名称]  

参数说明:  
目录名称 可以省略,如果省略的话,表示要统计目前所在目录的档案容量  
-a   :全部的档案与目录都列出来!默认值是指列出目录的值!  
-b   :列出的值以 bytes 输出  
-c   :最后加总 total !  
-k  : 列出的值以KB输出 
-m  :列出的值以 MB 输出  
-s   :只列出最后加总的值! 

链接文件: 
Hard Link: 
使用 hard link 设定连结文件时,磁盘的空间与inode 的数目都不会改变hard link 只是在某个目录下的 block 多写入一个关连数据,所以不会用掉inode 与磁盘空间 
不能跨 Filesystem;  
不能 link 目录。  
Symbolic Link: 
就是在建立一个独立的档案,而这个档案会让数据的读取指向他 link 的那个档案内容!由于只是利用档案来做为指向的动作,所以,当来源档被删除之后,symbolic link 的档案会开不了Symbolic Link 的使用方面较广 

*  ln 
语法:  
ln [-s] [ 来源档  ] [ 目的档]  
 参数说明:  
-s   :提供 symbolic line 的连结!  
如果不加任何参数的话,那么就属于 hard link 
ln -s /tmp/test test 

分区与格式化硬盘: 
– fdisk  硬盘切割 partition 的工具  
– mke2fs 就是 Linux 底下重要的 format 格式化的工具  
–  e2label 修改硬盘的 label (表头名称)的工具! 
– mknod  新增硬件对应文件的工具! 

*  fdisk  
语法:  
[root @test /root ]# fdisk [-l] [装置名称]   
参数说明:   
 -l  :直接列出该硬盘装置的 partition table  
范例:   
[root @test root]# fdisk /dev/hdb<==分割我的hdb 磁盘,记得后面不接数字 
 硬盘信息:通常我们需要知道这颗硬盘的信息时,直接按P
 删除扇区:如果我要删除一个以存在的扇区时,就需要:fdisk /dev/hdb先进入 fdisk 画面;  
 p:先看一下扇区的信息,假设要掉                                               ; 

d:这个时候会要你选择一个partition 
w储存到磁盘数据表中,并离开 fdisk 

新增扇区:

 – n新增一个磁区                        
 – p : 选择为primary       
– 1-4 primary 只允许四个
– :同样的储存离开! 

*  mke2fs  
语法:  
[root @thiz root ]# mke2fs [-b block-size] [-i inode-size]  
[root @thiz root ]# mke2fs [-c]  
[root @thiz root ]# mke2fs [-L]  
[root @thiz root ]# mke2fs [-j]  
参数说明:  
-b   :在设定每个数据区块占用的大小,目前支持的大小有 1024,2048, 4096 三种!   
-i   :设定 inode 值!  
-c   :检查错误磁盘,会比较慢!   
-L   :规划设定这个扇区的 label (表头名称)   
 -j   :建立 ext3 这个 journaling 的档案格式 

*  e2label  
语法:  
[root @test /root ]# e2label [/dev/hd...]  [label_name]   

各分区的挂载: 
– mount  
[root @thiz root ]# mount [-ahlV]   
[root @thiz root ]# mount -t type /dev/hdxx  /mountpoint  
[root @thiz root ]# mount -o [options]  
[root @thiz root ]# umount /mountpoint  
参数说明:  
– -a   :依照 /etc/fstab 的内容将所有相关的磁盘都挂上来!  
– -h   :只列出 mount 相关的参数,并不挂载任何装置  
– -l   :列出目前已经挂载的装置、档案系统名称与挂载点!  
– -V   :列出 mount 的版本信息  
– type :将后面 /dev/hdxx 这个装置以 type 的档案格式挂载到 /mountpoint 这个点,  
常见的 type 有底下几个:  
vfat, msdos        :这个是支持 Windows 系统的档案格式,尤其是 vfat 常用!  
ext, ext2           :这个就是 Linux 的主要档案格式!  
iso9660           :光驱的档案格式  
nfs, ntfs, ufs        :Windows 2000  使用 NTFS 格式! 

 -o :                                 
w   :让 mount 的扇区为可擦写  
suid   :允许该扇区可以设定档案为 SUID 的状态!  
exec   :允许该扇区可以执行 binary 的档案!  
auto   :允许该扇区可以使用 mount -a 的参数设定!  
async :允许扇区可以进行异步记录(内存与硬盘不同步!最常用!)  
defaults:同时具有 rw, suid, dev, exec, auto, nouser, async 这些功能的设定值!  
nosuid :不许该扇区具有 SUID 的档案属性!  
ro   :设定为只读属性!  
remount :让系统本来挂载的扇区重新被挂载! 

*  umount  
语法:  
 [root @thiz root]# umount [-f]  [device|mount_point]  
 参数说明:  
-f  :强制将该档案系统退出,最常使用在无法退出的 NFS 档案系统中了!  
开机挂起:vim /etc/fstab
1、分区或标头(卷标):就是分区
2、挂载的目录点:就是 mount 的挂载点!  
3、该扇区的档案格式:目前 Linux 大都使用ext2, ext3, reiserfs 等等的,  
4、档案格式参数区: 
5、是否可以被 dump 指令备份
6、检验扇区:这个数字在用来以 fsck 检验扇区用的!需要设定为1 不需要设定为0                                          0  

虚拟内存 Swap: 
– 设定一个 swap partition  
– 建立一个虚拟内存的文件 
建立虚拟内存的分区 : 
第一种正规的方法是:直接再加一块硬盘,并且将其中某个扇区规划为swap                          的文件系统 
1、使用fdisk 建立一个swap分区 
注:t, 82是 swap 分区格式的代号 
2、以mkswap  可格式化新建的swap分区 
#mkswap /dev/hdb3 
3、将swap启动  swapon  +  设备名swapon /dev/hdb3 
4、关掉swap : swapoff 

建立虚拟内存档案 : 
1  dd 指令来建立 swapfile            
2、以 mkswap 来将 swapfile 格式化为 swap 的档案格式;  
3、以 swapon 来启动该档案,使成为 swap ;  
4、以 swapoff 来关闭该档案 
dd if=/dev/zero of=/tmp/swap bs=4k count=16382 
dd这个指令是用来转换档案并且copy用的 
if指的是要被转换的输入档案格式 /dev/zero可以由man zero来查看内容 
of指的是输出的档案,我们将之输出到/tmp/swap这个档案 
bs指的是一个扇区占用几个kb; 
count指的是要使用多少个bs,所以最后的容量为bs*count = 4k  
2. mkswap 来将swapfile格式化为swap的档案格式 
3。以swapon来启动该档案,使之成为swap, 执行完后可以用free查看。 
dev/zero 文件代表一个永远输出0的设备文件,使用它作输入可以得到全为空的文件。 
/dev/null,外号叫无底洞,你可以向它输出任何数据

DMA的英文拼写是“Direct Memory Access”,就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。PIO模式下硬盘和内存之间的数据传输是由CPU来控制的;而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。 

磁盘效能: 
hdparm  
语法:  
[root @test /root ]# hdparm [-cdmXTt] [装置名称]   
参数说明:  

 [root @test /root]# hdparm -Tt /dev/hda   <== 测试 hda 这颗硬盘的 cache 与实际效能  
 [root @test /root]# hdparm -d0 /dev/hda<==  闭 DMA 模式!  
[root @test /root]# hdparm -d1 -c3 -X66 /dev/hda<==开启 DMA 模式在 DMA 66 ,并且