磁盘管理
磁盘管理
磁盘结构
一块硬盘由若干张磁盘构成,每张磁盘的表面涂有一层磁粉,磁盘会提供一个或多个读写磁头,磁盘通过读写磁头来
改变磁盘上磁性物质的方向,由此存储计算机中的0或1数据。
一个磁盘有以下组件组成:
1.磁面:每一张磁盘的表面,称为磁面;
2.磁道:每一个磁面的空间,会逻辑地切割出许多磁道
3.扇区:每个磁道可以再切割出若干个扇区,扇区是磁盘的最小单位,默认512B
4.磁柱:每个磁盘上同一个编号的磁道组成一个磁柱。
如果把每个扇区依照其编号顺序排列起来,就可以变成一个线性的磁盘空间。
磁盘种类
IDE (ATA) :133Mbps 并行 ,1个控制器,可以连2个数据盘。一主一从
SATA:6Gbps 串行, 1个控制器上只能连1个数据盘
USB:串行
SCSI:UltraSCSI 320Mbps 并行
SAS:串行 2.5英寸,较SCSI体积小,转速块,造价高,磁盘空间小
SAS或SCSI:1根总线可以节多个盘
SCSI 8:1个SCSI适配器(Iitiator),7个target,每个target可以接多个盘(每个盘都有一个
LCN:逻辑控制单元,数据首部填写LCN,这样CPU就是知道将数据存到哪个target的哪个盘)
SCSI 16:1个SCSI适配器,15个target
备注:在主板中集成的成为控制器,可插拔的叫做适配器。如:网卡适配器。
主引导记录(MBR)
1.整个磁盘的第0柱的第0磁面的第0个扇区,就是MBR
2.MBR存储以下信息:
1.BootLoad程序(初始化程序加载器):占用446B,用来存储OS的内核
2.分区数据表:占用64B,存储分区信息(记录硬盘上有多少分区,每个分区大小,给哪个OS使用等信息)
3.验证码:占2B,存储BootLoad的检查码(Checksum)
计算机启动时,会加载前446B,这是由OS来执行。当计算机无法读取MBR,则计算机将无法启动OS
备份还原MBR:dd命令
dd命令:转换并复制一个文件,复制的为底层的数据流(常用于硬件性能测试)
if = 数据来源input file
of=数据存储目标output file
bs= 默认单位为B
count= 个数
seek= 创建数据文件时,跳过的空间大小
eg:
dd if=/etc/inittab of=/root/inittab
dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1 #备份MBR至USB
dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1 #还原MBR至硬盘
dd if=/dev/zero of=/var/swapfile bs=1M count=1024 #制作虚拟镜像文件
cat /dev/cdrom > /root/rhel5.iso 制作磁盘镜像
设备文件名
IDE硬盘:
hda: 第1个IDE硬盘
hda1:第一个主分区 (主分区最多只能有4个)
hda2:第二个主分区/扩展分区(扩展分区只能有1个)
hda3: 第三个主分区/扩展分区
hda4: 第四个主分区/扩展分区
hda5: 第一个逻辑分区 (逻辑分区可以有多个,从5开始)
hda6: 第二个逻辑分区
hdb:第2个IDE硬盘
SATA、SCSI硬盘:
sda:第1个SATA或SCSI硬盘
sdb:第2个SATA或SCSI硬盘
fdisk -l #查看当前系统识别了几块硬盘
创建设备文件 mknod
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
-m MODE
eg:
mknod -m 640 mydev c 66 1 #创建mydev文件,类型为字符设备文件,权限640,主设备号66,次设备号1
echo "hello" >> /dev/pst/0 #向远程登陆终端0,发送hello消息
echo "hello" >> /dev/sda 会覆盖MBR
查看/设置磁盘
hdparm [option...] DEVICE...
-d NUM #获取或设置是否启用磁盘DMA,NUM=1表示启用,NUM=0表示停用
-B NUM # 设置高级电源管理(APM)功能,NUM=0~255,越小越省电但效率越差,255表示停用APM功能
-C #检查IDE磁盘的状态:
unknown:未知
active/idle:状态正常
standby:待命模式
sleeping:睡眠模式
-g #显示磁盘的结果信息,例如:磁柱、磁面、扇区数量
-S NUM # 进入待命模式的时间,NUM的值:1~240:5s的倍数 ;241~251:(NUM-240)*30分钟
-u NUM #获取或设置中断屏蔽标签的数值
-v #显示所有的磁盘参数
#hdparm /dev/sda | grep 'dma' #检查dma状态
监控磁盘空间
df 查看已挂载磁盘的使用情况
-h #按人类可读的形式显示
-i #显示inode使用情况
-P #不换行显示
-T #显示文件系统类型
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 3.8G 1.7G 2.0G 46% /
/dev/sda3 15G 167M 14G 2% /home
/dev/sda1 46M 11M 33M 24% /boot
tmpfs 252M 0 252M 0% /dev/shm
字段说明:
Filesystem:设备文件
Size:大小
Used:已使用
Available:可用
Use%:使用率
Mounted on:挂载点
du #显示某个特定目录的磁盘空间,默认当前目录
-h #人类可读模式显示
-c #显示所有目录下所有文件大小及总大小
-s #显示整个目录的文件大小
#du -h
8.0K ./.gnome2_private
8.0K ./.eggcups
。。。
压缩数据
压缩工具 文件扩展名 描述
bzip2 .bz2
compress .z
gzip .gz
zip .zip
xz .xz
bzip2 工具
1.bzip2 压缩文件
-d 解压缩,等同于bunzip2
-k 压缩时,保留原文件
-Num 指定压缩比,默认为6,取值范围1~9
2.bzcat 查看压缩文件的内容
3.bunzip2 解压.bz2文件
4.bzip2recover
eg:
#bzip2 aa.txt 压缩成aa.txt.bz2
#bzcat aa.txt.bz2 查看.bz2内容
#bunzip2 aa.txt.bz2 解压.bz2文件
gzip工具
linux最流行,用来替代compress工具。
1.gzip 压缩文件
-d 解压文件
-Num 指定压缩比,默认为6,取值范围1~9
2.zcat 查看压缩文件内容
3.gunzip 解压文件,解压文件会删除原文件
zip工具
优点:能够将整个目录下的文件都压缩进单个文件,即归档又压缩
缺点:压缩比不大
1.zip 创建1个压缩文件,包含指定的文件和目录
2.zipcloat 创建1个加密的压缩文件,包含指定的文件和目录
3.zipnote 从zip文件中提取批注
4.zipsplit 将一个现有zip文件分割成多个更小的固定大小的文件
5.unzip 从zip文件提取文件和目录
#zip -r testzip test #递归将目录test压缩进testzip文件
xz工具
比bz2压缩比小
xz
-d 解压缩
-Num 指定压缩比,默认6,取值范围:1~9
-k 压缩时保留原文件
xzdec 解压缩
-k 保留原文件
归档数据
压缩工具大多只能压缩单个文件,不是归档工具。目前广泛使用的归档工具时tar
tar function [options] object1 object2
function
-A 将已有tar归档文件追加到另一个已有tar归档文件
-c 创建新归档文件
-t 列出已有tar归档文件的内容
-r 追加文件到已又tar文件末尾
-x 从已有tar归档文件提取文件
options
-C dir #指定解压路径
-f file #输出结果到文件
-j #输出重定向给bzip2命令来压缩/解压打包内容
-z #输出重定向给gzip命令来压缩/解压打包内容
-v #打印原文件
#mkdir ./pack/{a,b}.txt
1.打包、查看、解包
#tar -cvf pack.tar pack #打包
pack/
pack/a.txt/
pack/b.txt/
#tar -tf pack.tar #查看
pack/
pack/a.txt/
pack/b.txt/
#tar -xvf pack.tar #解包
2.打包再用bzip2压缩,查看,解压缩包
#tar -cjf pack.tar.bz2 pack #打包并用bzip2工具压缩
#tar -tf pack.tar.bz2
pack/
pack/a.txt/
pack/b.txt/
#tar -xjf pack.tar.bz2 #用bzip2工具解压缩后,再解包
3.打包再用gzip压缩,查看,解压缩包
#tar -czf pack.tar.gz pack
#tar -tf pack.tar.gz
#tar -xzf pack.tar.gz -C /root/ #指定解压路径
分区
一个硬盘,需要经过分区--->制作文件系统----->挂载 三步之后才能使用
每个分区信息占用16B,记录以下信息:
1.分区开始磁柱;
2.磁柱数量:
3.分区系统标识符:即分区上的文件结构或者OS的标识符
主要分区:
分区信息存储在MBR中,故MBR只能存储4个主要分区
扩展分区:
一个硬盘要划分多于4个分区时,需要用到扩展分区,然后在扩展分区中建里多个逻辑分区。
扩展分区信息存在于MBR中,只能存储分区信息,不能存放文件数据
逻辑分区:
存储在扩展分区中的分区,每个逻辑分区都可以存储一个文件系统。
不同种类的扩展分区,可以建立的逻辑分区数量不一样:
1.系统标识符=5(Extended)的扩展分区:最大12个
2.系统标识符=85(linux Extended)的扩展分区:
1.IDE硬盘:最多60个
2.SCSI硬盘:最多12个
主要/扩展分区:使用1-4
逻辑分区:使用5-63
创建分区
创建分区,以容纳文件系统。
分区管理工具:fdisk 最多创建15个分区
fdisk是一个交互式的分区管理工具,输入fdisk命令后,可使用以下交互式命令
#fdisk 设备文件名称
l 显示系统支持的分区类型
p 显示分区信息(包括未保存的改动)
d 删除一个分区
n 建立一个新分区
n----->e:建立扩展分区
n----->p:建立主分区
t 修改分区类型(系统ID)
q 退出不保存
w 保存退出
m 显示帮助信息
1、查看分区:fdisk -l 或 #fdisk后,输入p
#fdisk /dev/sda 。。。。省略 Command (m for help): p #输入p命令 Disk /dev/sda: 21.4 GB, 21474836480 bytes #大小:214G 255 heads, 63 sectors/track, 2610 cylinders #255个磁面,每个磁道63个扇区,2610个磁柱 Units = cylinders of 16065 * 512 = 8225280 bytes #磁柱大小,即unit= 1个磁道(63*512)*255磁面 Device Boot Start End Blocks Id System /dev/sda1 * 1 6 48163+ 83 Linux /dev/sda2 7 515 4088542+ 83 Linux /dev/sda3 516 2480 15783862+ 83 Linux /dev/sda4 2481 2610 1044225 5 Extended /dev/sda5 2481 2610 1044193+ 82 Linux swap / Solaris
Device:分区的设备文件名
Boot:是否为启动分区(引导分区),一个硬盘只有一个。
Start:分区起始磁柱
End:分区结束磁柱
Blocks:分区的大小,单位是块,1块=1KB
ID:分区的类型编号
System:使用这个分区的操作系统名称
2、添加分区
举例:
#fdisk /dev/sdb
Command (m for help):n #第1步:输入n
Command action
e extended
p primary partition (1-4)
p #第2步设置分区类型:输入p表示创建主分区
Partition number (1-4):1 #第3步设置分区编号
First cylinder (1-1044, default 1): #第4步设置起始磁柱,按回车或1,表示按顺序排
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): +100M #第5步设置分区大小
Device Boot Start End Blocks Id System
/dev/sdb1 1 13 104391 83 Linux
Command (m for help): p #第6步,查看分区
Command (m for help): w #第7步,保存退出
备注:第5步,也可以指定+size 设置size个磁柱,+sizeK 设置size KB
2、删除分区
删除分区 #fdisk /dev/sdb Command (m for help): p #1.查看 Disk /dev/sdb: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 13 104391 83 Linux Command (m for help): d #2.删除分区 Selected partition 1 #3.提示,由于只有一个分区,所以自动跳过。 Command (m for help): p #4.查看是否删除 Command (m for help): w #5.保存退出
3、修改分区系统标识符
分区系统标识符是一个16进制的数值,用来记录分区用途的信息,例如:分区存储的是哪一种文件系统
常见分区系统标识符
标识符 名称 说明
7 NTFS
82 Linux swap/Solaris swap分区
83 linux ext2和ext3
8e linux LVM linux逻辑卷使用的分区
#fdisk /dev/sdb Command (m for help): l #查看支持的分区类型 。。。。
Command (m for help): p #查看分区
。。。
Command (m for help): t #修改分区系统标识符
Hex code (type L to list codes): 82 #修改为swap分区
Command (m for help): w #保存
3、更新分区数据表
添加、修改、删除分区并且存储时,如果提示以下信息,表示操作的是启动磁盘,需重启系统后生效
WARNING:Re-reading the partiion table failed
with error 16:
使立即生效的办法:partprobe命令。
原理:让内核重读设备分区表
#partprobo [DEVICE]
#cat /proc/partitions #查看内核识别的设备分区表
文件系统
1.文件系统简介
文件系统主要用来存储文件的数据
文件由OS通过文件系统来决定哪些扇区用来存放文件的信息(权限、拥有者等信息),哪些扇区用来存放文件的内容
为了快速调用文件的信息,将磁盘空间规划下列几项组件:
1.块:主要用来存放文件的内容,细分为:
数据块:存放文件的内容
超级块:存放数据块的信息,如:各个块是空的还是有内容
块大小是固定的,若文件大小不能整除块大小,则增加1块。所以,块大执行效率高,浪费空间。块小执行效率底,节约空间。
2.索引节点
存储文件的信息,信息包括:
1)文件类型
2)权限
3)链接数量
4)拥有者信息
5)拥有组信息
6)文件大小
7)数据块位置
文件系统能存储的文件个数,由索引节点数来决定。
linux常见的文件系统
1)linux专用文件系统:ext、ext2、ext3、swapfs、reiserfs等
2)支持其他平台的文件系统:msdos、vfat、ntfs、udf
3)系统运行类的文件系统:procfs、devfs、tmpfs
4)网络文件系统:NTFS、smbfs、AFS、NFS,默认不支持NTFS,若要支持NTFS,需自行编译内核。
ext2:扩展文件系统第2版
最大文件大小增加道2T
ext2系统容易在系统断电或系统崩溃时损坏
ext3:扩展文件系统第3版
具有日志功能,解决了ext2断电问题
缺点:无法恢复误删的文件,不支持加密文件
ext4:
支持数据压缩和加密,支持块预分配。
2.制作文件系统
注意事项:
1.制作文件系统,会使原文件系统中的文件全部消失;
2.制作文件系统有别于格式化:linux的格式化只是清空磁盘数据,并不会制作文件系统
3.建立文件系统只是在磁盘空间上建立数据块和索引节点
4.准备工作:磁盘空间、决定制作哪种文件系统
制作文件系统:mkfs
mkfs [-t FSTYPE] [DEVICE] [BLOCKS]
-t FSTYPE: 指定文件系统类型,默认ext2
DEVICE 磁盘设备名称
BLOCKS 要在这个文件系统上建立多少个数据块,不能超过磁盘空间的大小,不指定,默认使用所有
#mkfs /dev/sdb1
tune2fs
-L LABEL 修改卷标
-U UUID
-c Num 指定挂载次数达到Num后进行自检
mke2fs #专门管理ext系列文件
-j #创建ext3文件系统
-b #指定块大小,默认4096,可取值1024、2048、4096
-L LABLE 指定分区卷标
#mke2fs -L homedata /dev/sdb1
-m #指定预留给root的块数百分比
-i #指定为多少字节的空间创建1个inode,默认8192,值为2^n倍
-N #指定inode个数
-F #强制创建文件
blkid
作用:查看磁盘设备的属性
显示字段解释:
UUID:统一的全局表示符
TYPE:文件系统类型
SEC_TYPE:文件完全类型
LABEL:卷标
#blkid /dev/sdb1
e2label
作用:用于查看或定义卷标
#e2label /dev/sdb1 #查看卷标
#e2lable /dev/sdb1 Mydata #设置卷标为Mydata
3.挂载/卸载文件系统
制作文件系统后,需要挂载,方可使用。
挂载的好处:
1.用户只需知道文件所在目录,不比关心在哪个设备上。
2.便于灾难恢复,硬盘出现故障时,只需更换硬盘,挂载在相同位置。然后还原数据即可。
挂载点要求:
1.挂载点没有被其他进程使用
2.挂载点需事先存在
mount
用法:mount [选项] [-o [选项]] [DEVICE] [MOUNT_POINTER]
-a 挂载/etc/fstab文件中所有未挂载的文件系统
-t 指定文件系统
-o 指定挂载属性
async/sync 读取方式是同步,还是异步。异步的I/O效率较高
auto/noauto 定义在执行mount -a命令时,是否自动挂载。
exec/noexec 在读取文件系统上的执行文件时,是否允许被执行
atime/noactime 文件被异动时,是否更新其访问时间戳。
dev/nodev 是否启用设备节点文件,dev表示启用,nodev表示不启用
suid/nosuid 是否启用特殊权限的功能
user/nouser 是否允许普通用户执行mount命令
rw/ro 挂载权限
remount 重新挂载当前文件系统
默认挂载属性:rw+suid+dev+exec+auto+nouser+async+atime
DEVICE :可以是设备文件、卷标:LABEL=“”、UUID:UUID=“”
eg:
#mount -t iso9660 -o loop tt.iso mnt #将.iso文件当作真实CD来挂载,
-o loop:挂载一个文件
linux访问windows共享文件:
#smbclient -L //192.168.4.48 -U 用户名 #查看windows所有共享文件夹
#mount -t cifs -o username=用户名,password=密码,iocharse=utf8,codepage=cp936 //192.168.4.48/tmp /home/tmp
1)查看挂载数据表:
mount命令,实际查看的是/etc/mtab文件。挂载时,自动往/etc/mtab写记录。取消挂载时,从/etc/mtab文件删除记录。
2)挂载:
mount命令只是临时挂载,重启失效。如果想重启后,自动挂载,需要写入/etc/fstab文件
#mkdir /mnt #mount -t ext3 -o ro /dev/sdb1 /root/mnt #mount 查看挂载 /dev/sdb1 on /root/mnt type ext3 (ro) #mount -o remount,rw /dev/sdb1 /root/mnt #修改挂载属性 #mount /dev/sdb1 on /root/mnt type ext2 (rw)
备注:
挂载将遮住挂载点原来的文件,卸载后,挂载点下原来的文件才会显示出来。
CD-ROM存储介质,挂载状态时,不能弹出光驱。必须卸载后才能弹出光驱。
3)卸载
umount [-a] [-rv] [t FSTYPE] 或umount [-rv] [DEVICE] [MOUNT_POINTER]
-a 卸载所有文件系统
-r 卸载失败,尝试修改其挂载参数为ro
-v 显示卸载进度
-t FSTYPE 指定要卸载的文件系统类型
iso9660:标准cd-rom文件系统
DEVICE 设备文件名称
MOUNT_POINTER 挂载点
查询哪些进程在使用某一个文件系统
#fuser -vm DEVICE | MOUNT_POINTER
结束使用某一个文件系统的进程
#fuser -km [--SIGNAL] DEVICE | MOUNT_POINTER #默认向占用文件系统的进程发送SIGKILL信号
3.设置文件系统
/etc/fstab 文件系统数据表,开机自动加载。
/etc/fstab的功能:
1.开机自动挂载
2.定义每一个文件系统的信息
3.简化mount/umount命令的操作
4.定义某一个文件系统的挂载参数
5.设置备份的频率
6.配置开机时是否要检查文件系统
#cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/home /home ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda5 swap swap defaults 0 0
/etc/fstab配置文件解释:
1.DEVICE: 文件系统的名称,可使用设备文件名或者文件系统的标签名称,即Label Name
2.挂载点:挂载的路径,必须是绝对路径。
3.FS_TYPE:文件系统的类型
4.MOUNT_OPTIONS :挂载参数
5.DUMP_FREQ:当使用dump工具时,是否需要备份,以及备份频率。
1表示需要备份
0表示不需要备份。
6.FSCK_ORDER:执行fsck时,是否要检查这个文件系统,以及检查的顺序
0表示不检查
非0:表示检查,并代表检查的顺序。
备注:
1.测试/etc/fstab条目是否正确,可以使用mount -a命令
2.当不存在/etc/fstab文件时,会因无法挂载文件系统而启动失败,不小心删除/etc/fstab的解决方法:
将/etc/mtab文件做格式调整,复制成/etc/fstab(原因:linux会以fstab的格式把目前所有已挂载的文件系统信息
存储至/etc/mtab中)
4.检查文件系统
cache与buffer
1.物理内存调用的效率远高于磁盘
2.linux会把曾经读过的文件数据保存至cache/buffer,下次有进程需读取此文件时,直接读取缓存即可。
3.当进程要写入数据道磁盘时,会先暂存在cache/buffer中,等负载较低时,再写入磁盘
4.不正当关机,会造成cache/buffer中的数据来不及写入磁盘,导致文件内容损坏。linux在系统启动后,会自动修复
文件系统的状态,称为“文件系统检查”
文件系统检查
1.自动检查
系统启动后,状态为污秽的的文件系统会接受深入检查文件完整性。
文件系统以rw方式挂载时,且未正常卸载就关闭系统时,文件系统状态为污秽。
2.手动检查
#fsck [option] [DEVICE]
-A 依据/etc/fstab设置,检查所有文件系统的完整性
-a 自动修复文件系统
-y 直接修复,不提示确认。
-f 强制修复,即使为干净
-C 显示进度条
-N 不进行检查,只显示哪些检查会执行
DEVICE 文件系统的名称
#umount /dev/sdb1
#fsck -y /dev/sdb1
备注:不要对已挂载的文件系统执行fsck动作,因为fsck会破坏文件系统的结构。
e2fsck 专用于修复ext类型文件系统
-a/-p 自动修复
-f 强制检查
e2fsck -f -p /dev/sda5