Linux磁盘管理
(一)分区
1、分区的本质:把一定数量的扇区划分为逻辑上的区域,由系统进行相应的管理。
1)硬盘的物理结构:
(1)磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨
迹,这些圆形轨迹就叫做磁道(Track)
(2)柱面: 在有多个盘片构成的盘组中,由处于同一半径的磁道组成的一个圆柱面(Cylinder)
(3) 扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一
个扇区,叫做引导扇区。
2、通用规则:常用的数据放在硬盘内圈。例如windows系统安装在C盘。
3、分区的作用:
1)将数据保存在指定的范围内
2)便于逻辑上进行管理
4、服务器上Linux、UNIX分区优势:可以将存储数据随心所欲存放到任何位置,任何设备主机,方便
调用。访问目录就是访问分区。
(二)格式化
1、本质:构建文件系统。
构建文件的索引与文件数据之间的对应关系。
注意:分区格式化后数据依然保留,格式化只是修改盘片相应的数据标识,删除文件的时候,并不
删除数据,而是数据的标识和block可以被其他的程序所覆盖和重新使用,目录中block存放
的inode和block的对应关系也被擦除。但磁记录还存放在盘片上。
所以数据是可以恢复的,但是文件名或目录关系很难找回。
1)高级格式化:高级格式化又称逻辑格式化,它是指根据用户选定的文件系统(如FAT12、FAT16、
FAT32、NTFS、EXT2、EXT3等),在磁盘的特定区域写入特定数据,以达到初
始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。高级格式化包
括对主引导记录中分区表相应区域的重写、根据用户选定的文件系统,在分区中划出
一片用于存放文件分配表、目录表等用于文件管理的磁盘空间,以便用户使用该分区
管理文件。简单来说,就是重新构建文件系统。
2)低级格式化:低级格式化(Low-Level Formatting)又称低层格式化或物理格式化(Physical
Format),对于部分硬盘制造厂商,它也被称为初始化(initialization)。大多数
的硬盘制造商将低级格式化(Low-Level Formatting)定义为创建
硬盘扇区(sector)使硬盘具备存储能力的操作。简言之,就是清除文件系统,硬盘磁
记录全部归零。
(1)在Dos和windows下需要专用的工具低格;
(2)linux下,执行dd if=/dev/zero of=/dev/sda命令低格,将硬盘全部置0。
2、linux支持的文件系统由内核编译方式决定。
RHEL5支持的文件系统:
cd /lib/modules/ 进入内核的模块文件目录
cd 2.6.18-194.el5/ 进入指定的内核版本目录
cd kernel/ 进入内核模块目录
cd fs/ 放置文件系统模块,罗列着支持的所有文件系统
主要使用的文件系统:
fat:
vfat:
ntfs:
nfs:linux网络共享文件系统
cifs:windows的网络共享文件系统
ext2:RHEL3、4默认使用的文件系统
ext3:RHEL5默认使用的文件格式,比ext2多一个日志功能。在非计划停机或意外重启时,如果发
生存储数据的丢失,通过日志保证数据的完整性。
iso9660:光驱文件系统
reiserfs:对大量的小文件处理管理性能优异
btrfs:
3、文件系统是一种数据逻辑管理方式。主要保存文件的索引和具体数据以及相应的对应关系。
Linux文件系统(File System)是Linux系统的核心模块。
(三)磁盘分区命名方式
1、在Linux中,每一个硬件设备都映射到一个系统的文件,包括硬盘、光驱等IDE或SCSI设备。Linux
把各种IDE设备分配了一个由hd前缀组成的文件。而各种SCSI设备,则被分配了一个由sd前缀组成
的文件,编号方法为拉丁字母表顺序。
2、在Linux中规定,每一个硬盘设备最多能有4个主分区(其中包含扩展分区)。
常见的Linux磁盘命名规则为hdXY(或sdXY),其中X为小写拉丁字母,Y为阿拉伯数字。个别系统
可能命名略有差异。如:hda1 、hdb2、sdb2
(四)常用磁盘管理命令
对于一个新硬盘,首先需要对其进行分区。和Windows一样,在Linux下用于磁盘分区的工具也是
fdisk命令。除此之外,还可以通过cfdisk,parted等可视化工具进行分区。由于磁盘分区操作可能
造成数据损失,因此操作需要十分谨慎。
fdisk命令参数说明
a 切换分区是否为启动分区
b 编辑bsd卷标
c 切换分区是否为DOS兼容分区
d 删除分区
l 打印linux支持的分区类型
m 打印fdisk帮助信息
n 新增分区
o 创建空白的DOS分区表
p 打印该磁盘的分区表
q 不保存直接退出
s 创建一个空的Sun分区表
t 改变分区的类型号码
u 改变分区大小的显示方式
v 检验磁盘的分区列表
w 保存结果并退出
x 进入专家模式
1、fdisk -l 查看硬盘当前的分区
/dev/sda 设备名称,/dev设备文件目录。
2、fdsik /dev/sda 执行分区,注意fdsik 后跟的是设备名称,不是分区名称。
按下m键获取帮助
d删除一个分区
l 列出已知的分区类型
m 打印这个列表
n 增加一个新的分区
q 退出并不保存
p 打印出分区表
w 保存对分区表的修改
创建一个新的分区
1)询问创建主分区(primary partition)还是扩展分区(extended)
MBR分区表中保存64字节的分区表,保存一个分区需要16个字节,所以分区表只能描述四个
分区。
输入e创建扩展分区,扩展分区默认从4开始,sda4,hda4;如果当前分区少于四个,询问创建主
分区(p)或扩展分区(e);分区等于或大于四个不再询问,直接创建扩展分区(e)。
2)是否从上一个分区的末尾处开始分区,回车确定
3)分区的大小,可以输入 +size 或者磁柱数字表示,默认全分
4)输入p打印出来,显示出/dev/sda4分区
5)如果再次输入n执行创建,不在询问创建主分区还是扩展分区;分区的起始位置是从扩展分区的
初始部分开始分子分区
输入+100m,按p打印出来
6)现在的分区状态未写入分区表,按w键保存到分区表
7)提示重新启动后使用新的分区表;但是在生产中,由于设备不能随便重新启动。
所以通过执行partprobe 命令重新加载分区,内核动态的重新读取一次分区表。
注意:在RHEL6的早期版本,如6.1等早期版本中,partprobe有bug,必须重新启动,系统才会使
用新的分区表。
要使用分区还需要构建文件系统
3、构建文件系统
mkfs mkfs.ext3等命令
1)mkfs -t ext3 /dev/sda5
-t 指定格式化的文件系统的类型
filesystem label 当前文件系统卷标
OS type :操作系统类型
Block size:一个文件系统block,文件系统中存放数据的最小单位,这里是1024个字节
2048 inodes per group :一个分区组中有2048个inodes
2) mkfs其他常用参数
(1)-b
ext文件格式下,block大小会影响数据读取I/O的性能。
在盘片的旋转速度,机械臂的寻道时间相同的情况下,提高I/O效率的手段是将数据连续性存
储。所以block越大,I/O效率越高;但是block大,可能会造成存储空间的浪费,磁盘的碎片
大,存储性能下降。
所以需要合理的规划存储空间大小以及分配相应的文件大小。
(2)-i 创建inode的数量,对当前inode使用量的预估。
多大空间对应一个inode标识。一般默认即可。
<2>
dd if=/dev/zero of=/tmp/test.img bs=1M count=100
执行mkfs –t ext3 /tmp/test.img
格式化/tmp/test.img文件
提示该文件不是一个块文件。输入y确认继续执行。
所以文件也可以执行格式化。
该文件可以直接挂接,但是系统会提示该文件不是一个块的设备,或许应该使用 –o loop参
数以环回设备方式进行挂接。
在该文件下可以创建、写入文件。也可以卸载目录。查看该文件时,显示该文件格式为ext3
文件。
4、挂接的本质:
要使用磁盘分区,就需要挂载该分区。挂载时需要指定需要挂载的设备和挂载目录(该目录也成为
挂载点)。
1)dumpe2fs /dev/sda5 | less 查看分区格式化后的记录
filesystem volume name:磁盘的卷标名称
2)挂载磁盘分区的命令为mount,常用的命令格式如下所示:
mount -t type device dir
mount –t vfat /dev/hdb2 /tmp
例如:
mount /dev/sda5 /mnt
3)查看磁盘的挂载情况,直接输入不带参数的mount命令即可。
5、 卸载磁盘分区
要移除磁盘,例如卸载USB磁盘、光盘或者某一硬盘分区,则需要首先卸载该分区。卸载磁盘的命
令为umount,常用的命令格式如下所示:
umount [device|dir]
umount /hdb2
或umount /tmp
注意:卸载之前必须退出该目录,并确定目录下文件未被访问使用,否则会出现卸载失败。
6、 mount 其他常用参数
vi /etc/fstab
1)LABEL=/ 挂接的设备,一般以卷标名书写的,也可以用设备名称,为了避免设备加载顺序出现
名称变化。所以一般以卷标书写。
2)/ mountpoint挂接点
3)ext3 以什么样的文件系统挂接, 由于ext文件系统向下兼容,所以在这可以以ext2文件系统挂
接,但是会丧失ext3比ext2多出的功能。如果以其他文件系统挂接则会报错
4)defaults 挂接参数
man mount
/-o 指定挂接的参数
async:同步挂接方式
atime:记录文件的修改时间
auto:开机自动挂载
defaults:默认支持rw(只读方式挂接),suid(让分区支持suid),dev(以dev设备挂接),
auto(开机自动挂接),nouser,支持async
noauto:开机不自动挂载
nouser:只有超级用户可以挂载
ro:按只读权限挂载
rw:按可读可写权限挂载
user:任何用户都可以挂载
noexec:不允许可执行文件执行,注意千万不要把根分区挂载为noexec,那就无法使用系统了,
连mount命令都无法使用了,这时只有重新做系统了!
nodev:不允许挂载设备文件
nosuid,nosgid:不允许有suid和sgid属性
注意:光驱和软驱只有在装有介质时才可以进行挂载,因此它是noauto.
5)1 执行dump检查的时候自动将相应分区备份。
0是指dump(系统备份工具)。这一项为0,就表示从不备份。如果上次用dump备份,将显示
备份至今的天数。1为一天一次,2为两天一次
6)1 开机过程中检测是否需要执行fsck命令。
order 指fsck(启动时fsck检查的顺序)。
为0就表示不检查,1为第一个检查,2为第一的检查完了,检查值为2的 ,(/)分区永远都
是1,其它的分区只能从2开始,当数字相同就同时检查。如果要把第二块SATA硬盘上的
windows C 区挂到文件系统中,那么数据项是:/dev/sdb1 /c vfat defaults 0 0 (/c 是
事先建立的文件夹,作为c盘的挂载点。)当你修改了/etc/fstab后,一定要重新引导系统或
执行mount -a才会有效。
对于已经挂载好的设备,现在要改变挂载参数,这时可以不用卸载该设备,而可以使用下面
的命令(没有挂载的设备,remount 这个参数无效)
mount /mnt/D/ -o remount,ro (改defaults为ro)
7、对于没有正常卸载的磁盘,如遇突然断电的情况,可能会造成文件系统目录结构或文件损坏。因
此,遇到这种情况需要检查和修复磁盘分区。检查和修复磁盘分区的命令为fsck,其常用的命令格
式如下:
fsck [options] device
umount /hdb2
fsck /hdb2
fsck常用选项
-t type 指定分区的类型。指定后fsck不自动检测分区类型,可提高检测速度
-p 不提示用户直接修复
-y 自动回答yes
-c 检测坏块
-f 强制检测,即使系统标志该分区无问题
-n 只检测,不修复
-v Verbose互动模式
8、创建卷标名
1)e2label /dev/sda5 /mnt
现在filesystem volume name 名称为/mnt
2)执行mount显示未挂接/dev/sda5 到/mnt
3)编辑/etc/fstab文件,添加
LABEL=/mnt /mnt ext3 defaults 0 0
4)使用mount –a 命令参照/etc/fstab文件内容重新挂接
显示/dev/sda5挂载成功
7、 swap:交换分区
1)free命令查看内存和交换分区的使用
一般情况下swap设置为内存的两倍(8G以下内存);8G以上的内存swap设置为和内存相同的容量。
2)fdisk /dev/sda 新建一个分区
3)partprobe重新加载分区表
fdisk –l 显示sda6添加完成
4)mkswap /dev/sda6 创建swap分区
5)swapon /dev/sda6 加载交换分区
6) swapoff /dev/sda6 卸载交换分区
7)通过mount命令看不到swap的挂接;
通过fdisk –l ,系统类型ID标识为82,
ID标识与分区本身实际用途没有关系,仅仅是一种标识;
ID标识只是可以方便查看分区类型
8)修改ID标识,
fdisk /dev/sda
t 参数
Hex code可以输入L来查看编码
9)fdisk –l查看
8、如何将数据迁移到新的分区,并把分区挂载到原来的目录上继续使用
1)将创建并已经格式化的/dev/sda5分区挂载到/mnt目录下,然后拷贝/home目录下的数据到/mnt下
2)由于cp拷贝文件时,会将文件所有者所有组改变。所以重新设定文件所有者和所有组,执行
chown -R afu. afu/
3)退出/mnt目录,卸除挂载
4)进入到/home目录,删除所有文件
5)现在将/dev/sda5 挂载到/home目录下
6)现在切换用户,显示正常
并且相应文件依然存在