关于计算机的磁盘,我们首先要从他的硬件组成开始了解...
磁盘的一些通用性质——
磁盘命名规则:SATA/USB/SCSI在系统中命名为sd[a-p]
整块磁盘的第一个扇区特别重要,储存MBR和分区表还有Magic Number(分区有效标志),共512bytes,下面我们一个个进行介绍...
MBR——Master Boot Record,466bytes,狭义的MBR指的是主引导分区(为一段储存空间,而不是程序),MBR中储存用于开机引导的程序(与操作系统无关)。广义的MBR即0柱面,0磁头,1扇区,包含以上三部分。
分区表(DPT):记录着整块硬盘如何进行分区,共64bytes,最多能储存4条分区记录。传统的MBR分区表最大寻址只能支持到2.2TB。随着大硬盘的广泛普及,新技术——GUID分区表被看作是取代MBR分区表的下一代分区表,例如Win8就是默认采用GUID分区表(GPT)
Magic Number:55AA
既然MBR分区表中只能储存4条分区记录,那么如果我想把硬盘分成6个区域要如何实现呢?想知道这个,我们就要先知道分区的类型。
主分区:不能再划分其他类型的分区,每个分区都相当于一块逻辑磁盘,分区编号为1-4
扩展分区:扩展分区是不能直接用的,在扩展分区之上再次分区产生的逻辑分区才是最终能够使用的,分区编号1-4
逻辑分区:在一块已经分出来的扩展分区上,在SATA硬盘上可以划分多大11个逻辑分区以供使用,与拓展分区存在包含关系,分区编号为5-15号
逻辑分区之间可以进行合并,但是逻辑分区和主分区之间是不能够进行合并的。扩展分区一旦被破坏,在该扩展分区内的逻辑分区也将被破坏!
Boot Sector——那么我们常见的多系统是怎么回事呢?不是只有MBR里面装的引导程序才能引导加载操作系统内核文件,进行开机吗?话虽没错,但是并不是这里的程序才能引导加载内核文件,还有个神奇的部分叫做Boot Sector,通常在一个分区的最前端,这里储存着boot loader程序,是出了MBR内的程序外另外一个可以引导开机的程序。那么一般的多系统开机到底是如何实现的呢?
以上就是比较“硬”的部分,在Linux的日常使用上我们知道这些就基本足够了,万一碰到不知道的我们不还有“谷哥”和“度娘”吗?^_^
下面我们介绍下关于磁盘的比较“软”的部分
我们日常要如何才能访问磁盘上的文件数据呢?我们知道,Linux的“一切皆文件”的思想,那么也就是说操作系统将一块硬盘视作一堆文件的集合,想要访问这些文件就要有一个入口——挂载点。挂载是将一个设备挂接在一个已经存在的目录下,由此访问设备内的文件数据。这个已经存在的目录就是挂载点,也就是访问的入口了。
另外我们有两点需要明确:
一个文件系统仅能挂载在一个文件夹下
一个文件夹下仅能挂载一个文件系统
下面就介绍下与磁盘相关的一些命令,命令用熟了,磁盘管理也就得心应手了~
挂载命令:mount
mount [-loa] 设备文件名 挂载点
mount 列出当前挂载的设备
-l 列出当前挂载设备 包含 label
-a 根据 /etc/fstab/内容将未挂载设备全部进行挂载
-o 后面加入一些其他参数,规范挂载的文件系统的细则
虽然mount命令博大精深,但一般用到的挂载命令十分简单
mount -t 文件系统名 设备名称 挂载点
例如:mount -t iso9660 /dev/cdrom /mnt/cdrom
卸载命令:umount
umount -fn 设备名或挂载点
-f 强制卸载
-n 卸载但不更新/etc/mtab 内容
有些U盘我们插在运行Linux系统的主机上,但却发现无法使用,这是为什么呢?
挂载磁盘的文件系统必须要在Linux Kernel中存在驱动程序!
NTFS文件系统Linux默认是没有相关驱动程序的,但可以通过互联网下载相关驱动,安装后可挂载使用NTFS格式磁盘
磁盘的分区,格式化,检验
分区命令:fdisk
fdisk 磁盘文件名
例如:fdisk /dev/sda
m for help
fdisk命令调用分区程序
分区针对整个磁盘
可参考命令菜单进行操作
操作完成后w为保存,q为放弃
简单格式化命令:mkfs
mkfs -t 文件系统名 磁盘文件名
例如:mkfs -t ext3 /dev/sda1
mkfs命令调用格式化程序
mkfs [tab][tab]显示出所支持的文件系统
高级格式化命令:mke2fs
mke2fs [-b block大小] [-i inode大小] [-L 卷标] [-cj] 设备文件名
-c 测试磁盘
-c-c 测试磁盘读写
-j加入journal,将Ext2升级Ext3
例如:mke2fs -j -L "Test" -b 2048 -i 8192 /dev/sda1
检查磁盘命令:fsck
fsck [-t 文件系统名] [-Cf] 设备文件名
-C 用直方图显示检验进度
-f 强制检查(细化检查)
例如fsck -Cf -t ext3 /dev/sda1
检查磁盘命令:badblocks
badblocks [-svw] 分区文件名
-s 在屏幕上列出进度
-v 在屏幕上看到进度
-w 使用写入方式进行测试
使用写入方式进行测试会抹去磁盘内容
例如:badblocks -sv /dev/sda1
磁盘参数修改
生成硬件文件命令:mknod
mknod 设备文件名 [-bcp] [Major] [Minor]
-b 设置为一个外部储存设备
-c 设置成一个外部输入设备
-p 设置成一个管道设备(FIFO文件)
Major——主设备代码
Minor——次设备代码
例如:mknod /dev/sda5 -b 22 10
现在的Linux内核通常不需要用户自己创建设备文件,系统会自动生成
修改卷标名命令:e2label
卷标是给用户看的磁盘文件名,由卷标可知磁盘用途等人为添加的信息
e2label 设备名 新的卷标名
例如:e2lable /dev/sda1 "My_Favorite_Movies"
修改磁盘信息命令:turn2fs
turn2fs [-lLj] 设备代号
-l 列出该分区内的基本信息
-L 修改卷标
-j 添加日志功能,将ext2磁盘升级为ext3
例如:turn2fs-l /dev/sda2
在配置文件 /etc/fstab 中储存的是系统开机挂载的目录,其中/是优先于其他目录首先被挂载在目录树上的,通常该文件中关于开机挂载磁盘信息如下
设备文件名(卷标) 挂载点 文件系统 文件系统参数 是否可用dump命令备份 是否开机可用fsck命令检查磁盘
而在/etc/mtab 和 /proc/mounts 中则是开机挂载磁盘的记录
将文件挂载到目录树上
如何将一个封装好的文件直接挂载在目录树上以便访问之中的内容呢?这个我们要提到一种特殊的挂载方式——loop挂载
loop挂载命令:mount -o loop 镜像文件 挂载点
例如:mount -o loop CentOS.iso /dev/centos_dvd
那么我们看到可以挂载iso镜像到系统中,那么我们便可以更改和使用其中的内容。所以后来才有了MD5验证码的广泛使用,以便效验文件是否是原来你想得到的文件。
以上我们看到我们可以将一文件挂载到目录树上,挂载后我们便可以对文件进行读写操作,那么这个文件不就像是个磁盘了吗?对,没错,如果我们生成一个大的空文件并利用loop挂载到目录树上,那便可以当做一块磁盘使用了!
step1:dd if=/dev/zero of=/home/tmpdev bs=1m count=1024
step2:mkfs -t ext3 /home/tmpdev
step3:mount -o loop /home/tmpdev /media/cdrom/
经过以上三步便生成了一个1G大小的文件并挂载到目录树上,成为一个loop设备,可当作磁盘使用,其中
dd命令:将一个文件内容写入到另一个文件中,if=后接输入文件位置 of=后接输出文件位置,利用bs来指定block大小,count为block的数量
mkfs命令:将文件格式化成相应的文件系统名
mount命令:以loop方式挂载生成的tmpdev文件
以上命令组可以巧妙解决初期系统磁盘分配不均的问题
别急,我们还有最后一个问题:swap分区的创建和挂载
swap分区是系统中的特殊分区。在系统运行过程中,如果要执行较大任务时便会遇到内存不足的情况,这时候swap分区便派上了用场,它的存在可以让内核将内存中不用的数据暂时存放在硬盘的swap分区中,需要时再取出。
格式化swap分区命令:mkswap
mkswap 分区文件名/挂载文件名
例如:mkswap dev/sda1
启动swap分区命令:swapon
swapon 分区文件名/挂载文件名
例如:swapon dev/sda1
可采用物理分区,或者创建大文件挂载的方式创建swap分区,方法同上
虽然随着内存价格的降低,swap的重要性已经越发不明显,但在休眠模式下面,系统会将数据写入swap中,所以swap的存在还是有一定必要的。