第八章 储存管理
-
机械硬盘主要由磁盘盘片、磁头、主轴、转动轴等组成;逻辑结构主要为磁道、扇区、柱面
-
硬盘大小:磁头数×柱面数×扇区数×每个扇区的大小
-
常见的机械硬盘接口:IDE、SATA、SCSI
-
硬盘识别MBR主引导记录,占据0磁道的第一个扇区,在一个512字节的MBR中
boot loader引导加载程序:前446个字节
partition table分区表:16×4个字节,主要存储分区号、分区的起始柱面、分区柱面数量
结束标志:最后2字节常见的分区号:
0x5或0xf:可拓展分区
0x82:交换分区
0x83:普通Linux分区
0x8e:逻辑卷管理分区
0xfd:Linux的RAID分区
-
一个硬盘最多可划分4个主分区,其他分区要在可拓展分区里增加,Linux内核中分区数量由如下限制:一个IDE硬盘最多可使用63个分区,一个SCSI最多可使用15个分区
-
分区的好处:方便管理控制、提高系统效率、限制用户使用的磁盘量、便于恢复备份
-
挂载:将硬件设备的文件系统和Linux的文件系统,通过指定目录进行关联。硬盘会在启动时自动挂载,光盘和U盘需要手动挂载
-
设备挂载命令
-
mount命令
基本格式1:
mount -l
单纯使用mount会显示出系统中以挂载的设备信息,-l会额外显示出卷标名称
基本格式2:
mount -a
自动检测/etc/fstab文件中有无因疏漏而未被挂载的文件,如果有则进行自动挂载
基本格式3:
mount [-t 系统类型] [-L 卷标名] [-o 特殊选项] [-n] 设备文件名 挂载点
-t:指定欲挂载文件系统类型常见有EXT2、EXT3、EXT4,如不指定则系统自动检测
-L:除了使用设备文件名之外,还可以利用文件系统的卷标名进行挂载
-n:再默认情况下系统会将实际的挂载情况实时写入/etc/mtab文件中,-n刻意不写入
-o:可以指定挂载的额外选项,比如读/写权限等。
-o 特殊选项查询表
选项 解释 rw/ro 读写/只读,默认为rw,文件系统挂载后拥有的权限 async/sync 异步/同步 默认为异步 auto/noauto 自动/手动,在使用mount -a命令时,是否自动根据/etc/fstab文件内容挂载 suid/nosuid 具有/不具有suid权限,默认具有 exec/noexec 执行/不执行,默认为执行,设定是否允许可执行文件在该文件系统中运行 user/nouser 允许/不允许普通用户挂载,默认不允许 defaults 定义默认值 相当于rw,suid,dev,exec,auto,nouser,async remount 重新挂载分区,设置特殊选项后需要重新挂载 dev/nodev 是否允许文件系统的block文件中提取数据 挂载步骤:
#挂载硬盘 mkdir /mnt/disk1 mount /dev/sdb1 /mnt/disk1 #挂载光盘 #查看设备名固定的 cat /proc/sys/dev/cdrom/info mkdir /mnt/cdrom/ mount /dev/cdrom /mnt/cdrom/ #挂载U盘 #查看设备名变动的 fdisk -l mkdir /mnt/sub mount -t vfat -o incharset=utf8 /dev/sda1 /mnt/usb/
自动挂载/etc/fstab文件
UUID=cwca6f57-ba5c-43ea-bca0-f239083d8bd2 /ext4 defaults 1 1 UUID=cwca6f57-ba5c-43ea-bca0-f239083d8bd2 /ext4 defaults 1 1
字段一:挂载每个文件系统的分区设备文件名或UUID,UUID是通用唯一标识符是128比特的数字可以理解为硬盘的ID
字段二:挂载点挂载点一定是已建立的空目录
字段三:文件系统类型,CentOS6.0默认ext4
字段四:挂载参数和mount一致
字段五:分区是否被dump备份,0表示不备份,1表示备份,2表示不定期备份
字段六:分区是否被fsck检测,0表示不检测,其他数字表示优先级,越小越优先
-
umount命令
卸载已装载的文件系统
-
-
分区管理命令
-
fdisk命令
2T以下硬盘分区,是一个交互式命令
fdisk -l
查询本机可识别的硬盘和分区fdisk 设备文件名
[root@localhost beinan]# fdisk -l Disk /dev/hda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size=512 bytes/512 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 7 HPFS/NTFS /dev/hda2 766 2805 16386300 c W95 FAT32 (LBA) /dev/hda3 2806 9729 55617030 5 Extended /dev/hda5 2806 3825 8193118+ 83 Linux /dev/hda6 3826 5100 10241406 83 Linux /dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris /dev/hda8 5199 6657 11719386 83 Linux /dev/hda9 6658 7751 8787523+ 83 Linux /dev/hda10 7752 9729 15888253+ 83 Linux
这个硬盘是80G的,有255个磁面;63个扇区;9729个磁柱;每个 cylinder(磁柱)的容量是 8225280 bytes,每个扇区大小是512bytes
Device:分区设备文件名
引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区;
Start (开始):表示的一个分区从X cylinder(磁柱)开始;起始柱面
End (结束):表示一个分区到 Y cylinder(磁柱)结束;终止柱面
id:分区内文件系统的ID,可以使用fdisk -i查看
system:分区内安装的系统
Blocks(容量):这分区大小,单位KB
-
分区交互界面指令表:
a 设置可引导标记
b 编辑bsd标签
c 设置DOS支持系统兼容标记
d 这是删除一个分区的动作;
l 显示已知文件分区类型,82是SWAP分区,83是linux分区
m 是列出帮助信息;
n 新建添加一个分区;
o 建立空白DOS分区
p 列出分区表;
q 不保存退出;
s 建立空白SUN磁盘标签
t 改变分区的系统ID
u 改变显示记录单位
v 验证分区表
w 保存并退出
x 扩展功能,专家功能; -
新建主分区过程:fdisk 硬盘名——n(新建)——p(建立主分区,e拓展分区,p主分区)——1(指定分区号)——按Enter键(默认从柱面1开始建立分区)——+5G(指定分区大小)——p(查看分区列表)
-
新建拓展分区过程:fdisk 硬盘名——n(新建)——p(建立主分区,e拓展分区,p主分区)——2(指定分区号)——按Enter键(上次以建立主分区所以默认从柱面655开始建立分区)——按Enter键(剩余空间都为拓展分区)
-
新建逻辑分区过程:fdisk 硬盘名——n(新建)——l(建立主分区,l逻辑分区,p主分区)+5G(指定分区大小)
保存并退出:w
-
-
parted命令
对2T以上的磁盘分区,也为交互式命令,立即生效不用保存,可以调整分区大小
parted 设备文件名
-
分区交互界面指令表:
parted交互命令 说 明 check NUMBER 做一次简单的文件系统检测 cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER 复制文件系统到另一个分区 help [COMMAND] 显示所有的命令帮助 mklabel,mktable LABEL-TYPE 创建新的磁盘卷标(分区表) mkfs NUMBER FS-TYPE 在分区上建立文件系统 mkpart PART-TYPE [FS-TYPE] START END 创建一个分区 mkpartfs PART-TYPE FS-TYPE START END 创建分区,并建立文件系统 move NUMBER START END 移动分区 name NUMBER NAME 给分区命名 print [devices|free|list,all|NUMBER] 显示分区表、活动设备、空闲空间、所有分区 quit 退出 rescue START END 修复丢失的分区 resize NUMBER START END 修改分区大小 rm NUMBER 删除分区 select DEVICE 选择需要编辑的设备 set NUMBER FLAG STATE 改变分区标记 toggle [NUMBER [FLAG]] 切换分区表的状态 unit UNIT 设置默认的单位 Version 显示版本 -
print查看MBR分区表:
-
-
number:分区号
start:起始分区位置,不像fdisk用柱面表示,这里用字节表示
end:结束分区位置
size:分区大小
type:分区类型
filesystem:文件系统类型
Flags:分区的标记
- 格式化:parted的mkfs只能格式化为EXT2,如果要EXT4需使用系统的mkfs
-
磁盘管理工具
-
df命令
用于显示Linux系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用容量、剩余容量等
基本格式:
df [选项] 文件或目录名
-a:显示所有文件系统,包括Linux特有的/proc、/sysfs
-m:以MB为单位
-k:以KB为单位
-h:使用人们习惯的KB、MB、GB单位自行显示内容
-T:显示该分区的文件系统名称
-i:不显示硬盘容量。而显示inode数量
-
du命令
统计目录或文件所占磁盘空间容量的命令
基本格式:
du [选项] 文件或目录名
-a:显示所有子目录和子文件的磁盘占用量
-h:使用习惯单位显示磁盘占用量
-s:统计磁盘总占用量,不列出子文件
-
fsck命令
用于检测文件系统并尝试修复错误,
基本格式:
fsck [选项] 分区设备文件名
-a:自动修复文件系统
-r:采取交互的修复模式
-A:按照/etc/fstab配置文件的内容检查文件内罗列的全部文件系统
-t 文件系统类型:指定要检查的文件系统类型
-C:显示检查分区进度条
-f:强制检测
-y:自动修复
修复时磁盘分区一定要处于挂载状态,否则可能破坏数据
-
-
磁盘列阵RAID
-
RAID 0
也叫Stripe或Striping(带区卷),是RAID级别中存储性能最好的,如果组成RAID 0的两块硬盘大小不一致则会影响性能
-
优点:
- 通过把多块硬盘合并成一块大的逻辑硬盘,实现了数据跨硬盘存储
- 通过把数据分割成相等大小的区块,分别存入不同硬盘,加快了读写速度
- 没有容量损失
缺点:
- 没有数据冗余功能,任何一块硬盘损坏丢失所有数据
- RAID 1
也叫Mirror或Mirroring(镜像卷),两块硬盘大小最好一致否子以小的为准,有数据冗余
优点:
- 有数据冗余,数据不易丢失
- 比单一硬盘读取速度快,因为RAID1会自动分配读取进程
缺点:
- 容量只有总量的50%
- 写入性能差,负责写入的芯片只有一个
- RAID 10或RAID 01
RAID 0和RAID1的组合
- RAID 5
由至少三块硬盘组成,每块硬盘容量一致,每次循环写入向其中一块硬盘加入奇偶校验值
优点:
- 有数据冗余功能
- 容量损失比RAID1小
- 读写性能比RAID1好,写入性能比RAID1差
缺点:
- 只支持一块硬盘数据损坏
- 相当于有一块硬盘用来保存奇偶校验
-
mdadm命令
基本格式:
mdadm [模式] [RAID 设备文件名] [选项] [成员设备名称]
模式:
Assemble:加入一个已经存在的阵列;
Build:创建一个没有超级块的阵列;
Create:创建一个阵列,每个设备都具有超级块;
Manage:管理阵列,如添加设备和删除损坏设备;
Misc:允许单独对阵列中的设备进行操作,如停止阵列;
Follow or Monitor:监控RAID状态; Grow:改变RAID的容量或阵列中的数目;
选项:-s,-scan:扫描配置文件或/proc/mdstat文件,发现丟失的信息;
-D,-detail:查看磁盘阵列详细信息;
-C,-create:建立新的磁盘阵列,也就是调用 Create模式;
-a,-auto=yes:采用标准格式建立磁阵列
-n,-raicklevices=数字:使用几块硬盘或分区组成RAID
-l,-level=级别:创建RAID的级别,可以是0,1,5
-x,-spare-devices=数字:使用几块硬盘或分区组成备份设备
-a,-add 设备文件名:在已经存在的RAID中加入设备
-r,-remove 设备文件名名:在已经存在的RAID中移除设备
-f,-fail设备文件名:把某个组成RAID的设备设置为错误状态
-S,-stop:停止RAID设备
-A,-assemble:按照配置文件加载RAID