常用的硬盘与硬件管理命令
硬盘
物理组成:硬盘由多个硬盘盘片组成,每个磁盘盘片上都有一个磁头(Head)进行该硬盘盘片的读写工作,当磁头固定不动,硬盘盘片旋转一周所走轨迹就是磁道(Track),所有硬盘盘片上同一段磁道组成了磁柱(Cylinder),一段磁道就是硬盘分区时的最小单位,即扇区(Sector),最小的硬盘存储物理量,通常为512 bytes.
文件系统(Filesystem)
主引导扇区(Master Boot Recoder.MBR)主引导扇区可以说是一块硬盘中最重要的地方,因为它记录了所有硬盘的分割信息,以及启动时可进行启动管理程序的写入等.MBR最大的限制在于它不够大,不足以存储所有的信息,仅能提供最多4个分区的记忆,因此,一块硬盘的主分区(P)与逻辑分区(E)数量之和最多只能有4个,并且扩展分区最多只能有一个.
块(Block):文件在磁盘中会被存储在一人固定大小的块中,即Block,Block的大小通常为2的次方,另外,由于磁盘的扇区物理量通常为0.5K(512Bytes),所以Block通常设为0.5K的整倍数,EXT2预设Block为4K.不过需要注意的是,一个Block最多仅能容纳一个文件,所以当一个不足4K的文件存储时,其剩余的空间将不会再被使用.Block的大小与inode有一定的关联,若Block规划得太小,则磁盘的Block数量会大增,造成inode在指向Block时搜索时间大大增加,又会造成大文件读写效率低下.另外需要注意的是,当系统读取某一个文件时,则该文件所处Block信息会被加载以内存中,所以该磁盘块会被放置的高速缓存区中.若这些块数据被改变,刚开始只有主存储器的块数据会被改变,且缓存区中的块数据会被标记为Dirty,而此时磁盘物理Block尚未被修正,所以,这些"Dirty"块的数据必须写到磁盘中,以保证磁盘物理Block上的数据与主存储器中的块数据的一致性.这也正是Linux系统非正常关机,或者突发性地跳电时,总是会造成系统耗费大量时间用于磁盘检验的原因.
superblock:进行分区时,每个磁盘分区就是一个文件系统(filesystem),而每个文件系统起始位置的Block就称为superblock.superblock的作用是存储诸如文件系统的大小,空Block和填满的Block,以及各自总数和其他诸如此类的信息,也就是说,当要使用这个磁盘分区(或者说文件系统)进行数据存取的时候,第一个要经过的就是superblock块,所以,superblock坏了,这个磁盘分区也就不能用了.
inode:就文件系统而言,一个inode是inode table中的一个项,inode包含了所有文件相关的信息,如名称,大小,连接的数量,数据建立日期,修改及存取时间等.它也包含了磁盘Block的文件指针(pointer),指针用来记录文件的存储位置.要规划inode,可以使用mke2fs工具.
查看硬盘或目录的容量的命令
df 查看硬盘的总容量,己用容量与inode等.
语法: #df [-ikm]
-i: 使用i-nodes显示结果
-k: 使用KBytes显示结果
-m: 使用MBytes显示结果
du 查看文件己用容量
语法: #du [-abckms] [folder_name & file_name]
-a: 列出所有的文件与目录,默认值是列出目录的值
-b: 列出的值以bytes输出
-c: 最后求总total
-k: 列出的值以KB输出
-m: 列出的值以MB输出
-s: 只列出最后求总的值
常用的磁盘管理命令
fdisk 硬盘分区工具
语法: #fdisk [-l][device_name]
-l: 直接列出该硬盘设备的分区
fdisk最主要的工作就是修改分区表,并没有实际地将硬盘切切割割.它会定义某一个分区是从n1磁柱到n2磁柱之间,因此,如果硬盘分区错误,只要在格式化之前将分区表复原,就可以将硬盘原来的数据恢复过来.
附加:一块硬盘最大的逻辑分区可以达到64个(总数,包含1-4的主分区),但是并非所有的Linux版本都会将所有的逻辑分区对应的磁盘代号都写入系统中,如Red Hat,它仅列出1-16个代号,其他的就得自己动手了.Mandrake则自动检测,当以fdisk设定好分区后,磁盘对应的磁盘代号则会自动在/dev/中设定.不过有时还是得自己庙宇磁盘代号,用mknod指令.
mknod
语法: #mknod [device][bcp][Major][Minor]
b: 设定节点为外部设备文档
c: 设定节点为接口设备,如键盘
p: 建立FIFO
mke2fs Linux下重要的格式化工具
语法: #mke2fs [-b block-size][-i inode-size]
#mke2fs [-c]
#mke2fs [-L]
#mke2fs [-j]
说明:
-b: 设定每个数据块占用的大小,目前支持的大小有1024,2048和4096三种
-i: 设定inode值
-c: 检查磁盘错误,会比较慢
-L: 设定这个扇区的label(表头名称)
-j: 建立ext3这个具有日志管理功能的文件格式
e2label 修改硬盘的label(表头名称)的工具
语法: #e2label [/dev/hd...][label_name]
example: #e2label /dev/hda1 / <==将/dev/hda1这个设备名设为"/"
fsck 检查硬盘有没有坏轨
语法: #fsck [-Aar][device_name]
-A: 依据/etc/fstab的内容,将所有的设备都扫描一次(通常启动过程中就会执行此指令)
-a: 自动修复检查到的问题扇区,所以不用一直按Y.
-r: 一定要让用户决定是否需要修复,与-a相反.
注意:通常只有身为root且在系统有问题的时候才能使用这个命令,在正常情况下使用此指令可能会对文件造成危害.在fsck一个分区之前,一定要先umount这个分区.最好是在单人维护模式(runlevel1)下使用这个命令.
sync 将内存中的数据同步写入硬盘
语法: #sync ; sync
在正常情况下,为了提高系统效率,很多时候运行程序产生的临时文件都不会直接存在硬盘中,而是存在内存中.内存的数据传递速度比硬盘快几十倍,所以这样有助于提高整个系统的效率.然而这也产生一个困扰,那就是当系统不正常关机时,可能会使一些己经改变但尚没存入硬盘的数据遗失(因为还在内存中),这时可以使用sync,它可以直接将系统暂存在内存中的数据回存写入硬盘中.
关于启动盘
mkbootdisk 制作启动软盘
语法: #mkbootdisk --device /dev/fd0 `uname -r`
--device: 后面接设备,通常接的就是软盘/dev/fd0
fdformat 用来低级格式化软盘
语法: #fdformat [device_name]
example: #fdformat /dev/fd0H1440 <==表示格式化/dev/fd0,后面的H1440表示1.44MB的软盘容量.在低格式化之后,还要将软盘的文件格式化为Linux的ext2文件格式,这要使用mke2fs指令.
硬盘的装载
mount
语法: #mount [-ahlV]
#mount -t type /dev/hdxx /mountpoint
#mount -o [options]
#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: windows2000使用的NTFS格式
-o: 些参数后面接的项很多,如下:
rw: 让装载的硬盘为可擦写
suid: 允许该硬盘配置文件为SUID状态
exec: 允许该硬盘执行二行制文件
auto: 允许该硬盘使用mount -a参数设定
nouser: 禁止他人(非root用户)使用装载功能,这是默认值
async: 允许硬盘进行异步记录(内存与硬盘不同步,最常用)
defaults:同时具有rw,suid,dev,exec,auto,nouser,async这些功能
nosuid: 不允许该硬盘具有SUID文件属性
ro: 设定为只读属性
remount:让系统己经装载的硬盘重新被装载
umount
语法: #umount [-f] [device|mount_point]
-f: 强制将该文件系统退出,最常用在无法退出的NTFS文件系统中.
注:在卸载一个目录的时候,一定要退出该目录.
hdparm 硬盘效能测试与启用
语法: #hdparm [-cdmXTt] [device_name]
-c: 提供32位的存取模式,支持的形式有:
-c0:关闭32位存以模式
-c1:开启32位存取模式
-c3:以较为物殊的sync模式开启32位存取模式(建议值)
-d: 是否启动硬盘的DMA模式,0为关闭,1为开启
-m: 设定multiple sector I/O模式,通常默认为16,建议值为16
-X: 设定IDE/ATA模式的项,支持如下设定:
-X34:开启DMA mode 2 (ATA)
-X66:开启ultra DMA mode 2 (ATA66)
-T: 测试缓存区cache的存取效能
-t: 测试硬盘的实际存取效能(较正确)
example: #hdparm -Tt /dev/hda <==测试hda的cache与实际效能
#hdparm -d0 /dev/hda <==关闭DMA模式
#hdparm -d1 -c3 -X66 <==开启DMA模式为DMA 66,并开启32位存取模式
可以将开启磁盘DMA模式写入/etc/rc.d/rc.local中
文件系统的装载
装载软盘
#mount -t ext2 /dev/fd0 /mnt/floppy <==Linux 格式
#mount -t vfat /dev/fd0 /mnt/floppy <==Windows 格式
#umount /dev/fd0 <==将软驱卸载
装载光驱
#modprobe cdrom <==加载cdrom模块
#modprobe ide-cd <==加载模块
#mount -t iso9660 /dev/cdrom /mnt/cdrom <==装载光驱
#umount /mnt/cdrom <==卸载
装载Windows分区
#mount -t vfat /dev/hda1 /mnt/win98 <==装载windows分区,假设/dev/hda1是windows分区.
安装新硬盘的步骤:
1.首先以fdisk分好区(#fdisk /dev/hdb)
2.再以mke2fs格式化分区(#mke2fs /dev/hdb1)
3.建立一个挂载点(#mkdir /mnt/newhard)
4.装载新建的文件系统(#mount -t ext2 /dev/hdb1 /mnt/newhard)
设定启动实时装载方式(/etc/fstab)
系统装载的一些限制:
1.根目录"/"必须装载,而且一定先于其他装载点.
2.其他装载点必须为己建立的目录,可以任意指定,但一定要遵守必要的系统目录架构原则.
3.所有装载点在同一时间内只能装载一次
4.所有分区在同一时间内只能装载一次
5.若进行卸载,必须先将工作目录移到装载点(及其子目录)之外.
建立与装载虚拟内存文件
增加虚拟内存,有两个方法
.设定一个Swap分区
.建立一个虚拟内存的文件
一:建立虚拟内存分区(Swap分区)
1.fdisk /dev/hdxx <==新建一个分区,分区ID设为82
2.mkswap /dev/hdxx <==格式化swap分区
3.swapon /dev/hdxx <==启动swap分区
4.swapoff /dev/hdxx <==关闭swap分区
二:建立虚拟内存文件(Swap文件)
1.dd if=/dev/zero of=/tmp/swap bs=4k count=16382 <==dd指令用来转换文件并用于复制目的.if指的是要被转换的输入文件格式,of指的是输出文件,bs指的是一个分区点用多少KB,count指的是要用多少个bs,所以最后的容量为bs*count.
2.mkswap /tmp/swap <==以mkswap将swapfile格式化为swap文件格式
3.free <==print memory usage
4.swapon /tmp/swap <==以swapon启动该文件,使之为swap
5.free <==print memory usage
6.swapoff /tmp/swap <==以swapoff关闭该文件.