磁盘管理
介绍
设备文件
-
目录
- /dev
-
块设备
- b-block,随机访问,如磁盘、光盘
-
字符设备
- c-character,线性访问,如键盘、打印机
查看磁盘
- lsblk
磁盘命名方式
-
/dev/sd[a-z]
-
sd-串口设备
- sata
- usb
- scsi
- sas
-
-
/dev/hd[a-z]
-
hd-并口设备
- ide
-
-
/dev/vd[a-z]
- KVM虚拟化设备
-
/dev/sr0
- 镜像文件,文件系统iso9660
-
命名
- 设备:/dev/sda /dev/sdb …
- 分区:/dev/sda1 /dev/sda2 …
磁盘分类
-
机械硬盘HDD
-
物理结构
- 主轴、磁盘、磁头、磁头臂、永磁铁、空气过滤片
-
逻辑结构
-
磁道
- 以盘片中心为圆心,半径大小不同的同心圆组成的环形区域
-
扇区
- 磁道上的一段圆弧,1扇区512B,磁盘中最小单位
B(Byte) 1Byte(字节)=8bit(比特)
- 磁道上的一段圆弧,1扇区512B,磁盘中最小单位
-
柱面
- 是虚的,类似于桶壁,是由相同半径的磁道组成的圆柱形环壁 13个柱面约等于100M
-
磁盘容量
- 512byte(一个扇区大小)扇区数量柱面的个数*磁头的个数
-
-
-
固态硬盘SSD
磁盘读写速度影响因素
- 寻道时间
- 旋转时间
- 数据传输时间
存储类型
-
NAS(Network Attached Storage) 网络附加存储
- 是一个网络上的文件系统 应用:NFS
-
SAN(Storage Area Network)存储区域网络
- 是一个网络上的磁盘,性能最好,贵
-
DAS(Direct-attached Storage) 直连存储,如U盘、移动硬盘
-
分布式存储 hdfa ceph
-
云存储
设备文件
-
创建mknod
-
mknod [OPTION]… NAME TYPE [MAJOR MINOR]
- mknod /dev/sdb1 b 8 17
-
type:b c p
-
一个设备可以对应有多个名称
-
-
设备号
-
major
- 主设备号,区分设备类型
-
minor
- 次设备号,同一类型的编号
-
查看
- lsblk、cat /proc/partitions、ll第5列
-
磁盘分区
分区目的
- 易于管理和使用,加速文件查找速度
- 数据安全
分区表类型
-
MBR(msdos)
-
特点
- 最大支持2TB以内的硬盘
- 主分区+扩展分区数量不超过4个
- 扩展分区最多只有一个
-
分区类型
-
主分区primary
- 编号1-4,可直接格式化使用
-
扩展分区exrended
- 编号1-4,不能直接格式化使用
-
逻辑分区logical
- 在扩展分区上划分,编号5-64(串口设备),可格式化使用
逻辑分区的分区表位于扩展分区内
- 在扩展分区上划分,编号5-64(串口设备),可格式化使用
-
-
组成
- MBR(主引导记录)位于磁盘的前512字节
bootloader(446)+分区表(64)+magic number(2)
引导加载程序 每个分区表占16B
- MBR(主引导记录)位于磁盘的前512字节
-
-
GPT
- 最大128个分区,无内存限制
-
loop
- root、swap
分区相关
-
- 确定磁盘标签类型(如果是新磁盘)
-
2)分区
-
3)通知内核重读分区表:partprobe
- 内核记录分区表的文件: /proc/partitions
-
4)创建文件系统 或称为格式化
-
mkfs.xfs /dev/sdb1
- -f 强制覆盖
- -b 格式化时指定块的大小 默认4096
-
mkfs.ext4 /dev/sdb2
-
-
5)挂载使用(相当于U盘要插到电脑上使用)
分区命令
-
fdisk
-
查询
-
fdisk -l
- 列出所有设备的分区表信息
-
fdisk -l /dev/sda
- 列出指定设备的分区表信息
-
-
分区
-
分区表
- 默认使用MBR,磁盘标签类型:dos
-
fdisk /dev/sdb
-
n 创建分区
- p 主分区
- e 扩展分区
- l 逻辑分区
-
p 打印分区表
-
d 删除分区
-
m 帮助菜单
-
q 不保存退出
-
w 保存退出
-
-
步骤
- n创建>p/s选择分区类型>选择分区编号>选择扇区起始块>输入分区大小(+1G)>w保存退出
-
-
-
parted
-
语法
- parted [选项] 设备 命令 参数
-
选项
-
-l
- 列出所有设备的分区表信息
-
-s
- 脚本模式,不交互
-
-
命令
-
p/print
-
打印分区表
- parted -s /dev/sdb p
-
-
mklabel/mktable
-
创建磁盘标签,接msdos或gpt(新磁盘)
改变磁盘标签将丢失该磁盘上所有的数据- parted -s /dev/sdd mktable gpt
- parted -s /dev/sdd mklabel gpt
-
-
mkpart
-
创建新的分区:
mkpart 类型或名字 起始大小 结束大小- parted -s /dev/sdc mkpart p 0 5G
- parted -s /dev/sdd mkpart d2 2G 4G
-
-
rm
-
删除分区:rm 编号
- parted -s /dev/sdc rm 1
-
-
rescue
-
恢复分区:rescue 起始大小 结束大小
- parted -s /dev/sdd rescue 0 10G
-
-
q/quit
- 退出
-
-
-
gdisk
-
gdisk /dev/sdc
- 功能键与fdisk一致
- 使用GPT分区表,一个硬盘只能使用一种分区方式
-
文件系统
介绍
-
文件系统是对存储空间的分配和管理,负责文件的存储并对存入的文件进行保护和检索的系统
-
本地文件系统
- windows:fat32、ntfs
- linux:ext2、ext3、ext4、xfs、iso9660…
-
网络文件系统
- ngs、cifs、gludterfs、hdfs、ceph(分布式)
文件系统结构
-
superblock超级块
-
block与inode的总量、使用量、剩余量
- df -i 查询inode
-
大小:block-1/2/4KB,inode-128/256B
-
挂载时间、写入数据的时间、检查 (fsck) 的时间等文件系统相关信息
-
每个block group 都可能含有superblock,可用于superblock的修复
-
若超级块损坏分区不能使用
-
-
inode table
- 存储文件的元数据:权限、属主属组、大小、stat时间、文件内容所在的block number
- 一个文件占用一个inode,若inode分配完,即使有空余内存也无法再存入文件
- 如果两个的i节点相同, 说明他们是相同的文件
-
data block
- 存储文件的实际数据,一个文件可能占用多个block
查看文件系统类型信息
- dumpe2fs /dev/vg1/lv2 (ext家族系统)
- xfs_info /dev/vg1/exam (xfs系统)
文件存储形式
-
目录的内容为文件名及其inode映射
-
文件的内容位于block中,由其inode索引
-
文件操作
-
mv移动或重命名
- 更改文件名及其inode的存放位置,inode不变
-
rm删除文件
- 删除文件名及其inode映射
- 该inode及其对应block置为可用状态(原内容仍存在但可覆盖)
-
cp复制文件
- 分配新的inode,复制block
-
文件系统修复
-
ext
-
案例1: 系统无法启动
- 输入root密码 -> 修复损坏分区fsck /dev/sda2 -> yes -> reboot
-
案例二:Read-only file system
-
出现原因
- 没有正常关机
- 硬盘故障
-
尝试解决
-
- 先卸载此分区
-
- 再fsck.ext4 -fy /dev/sdb1
-
- 最后挂载此分区,检查是否可以正常读写
- 如果仍旧不可以正常读写,请报修磁盘
-
-
-
案例三:修复superblock
- 找到备份的superblock
dumpe2fs -h /dev/datavg/lv1 |grep ‘Blocks per group’ - 利用备份的 superblock恢复superblock
fsck.ext4 -b 8192 /dev/datavg/lv1
- 找到备份的superblock
-
-
xfs
- xfs_metadump -o /dev/sdb1 /save/sdb1.metadump#保存元数据信息
- umount /dev/sdb1#卸载文件系统
- xfs_repair -L /dev/sdb1#强制日志文件(log)清空
- xfs_repair -n /dev/sdb1#文件系统检查
- xfs_repair /dev/sdb1#文件系统修复
文件链接
-
软链接/符号链接
-
特点
- 1.类似于windows快捷方式,存放的是路径
- 2.产生新的inode
- 3.可以跨文件系统创建
- 4.删除源文件后链接文件无效
- 5.可以对目录做软链接
-
创建
-
ln -s 链接源 链接名
- ln -s /file1 /home/file11
-
-
文件类型
- l 链接文件
-
-
硬链接
-
特点
- 1.对主要数据文件备份 防止误删除
- 2.不产生新的inode
- 3.任意删除一个文件名,文件都不会损坏
- 4.不可以对目录做硬链接
- 5.不可以跨文件系统创建
-
创建
-
ln 链接源 链接名
- ln /file2 /home/file22
-
-
文件类型
- 与链接源文件类型一致
-
挂载
挂载目的
- 通过挂载点,得到访问设备的入口
命令
-
mount挂载
-
用法
-
mount [-t vfstype] [-o option[,option]…] device dir
- mount /dev/sdb1 /file
-
挂载点目录需已存在,同一挂载点只能挂载一个设备,一个设备可挂载多个目录
-
-
选项
- -t 指定文件系统类型
- -o 指定挂载属性
- -a 挂载/etc/fstab中的未挂载项
-
挂载属性
-
ro 只读文件系统 read only
-
rw 可读写 read write
-
remount 重新挂载已挂载的文件系统
-
defaults 默认属性:rw, suid, dev, exec,auto, nouser, and async
async 异步写入
sync 同步写入
auto/noauto 是否支持开机挂载
dev/nodev 是否支持设备文件
exec/noexec 是否允许分区上拥有可运行二进制文件
suid/nosuid 是否允许分区上含有suid/sgid的文件格式
user/nouser 是否允许分区让任何使用者运行mount
_netdev 如果连的上就开机挂载,如果连不上就不挂载
-
-
-
umount卸载
- umount 设备名称/挂载点
-
查看
-
已挂载文件系统信息
- df -h
-
查看设备uuid
- blkid /dev/sdb1
-
开机挂载
-
通过配置文件
-
vim /etc/fstab
-
/dev/sdb1 /mnt xfs defaults 0 0
#设备名称 挂载点 系统类型 挂载属性 dump fsck-
设备名称
- /dev/sdb1
- UUID=设备uuid
- 10.11.59.110:/abc #远程挂载
-
挂载属性
- defaults
- defaults,ro…
-
dump备份
- 0 不备份
- 1 一天一次
- 2 两天一次
-
fach检查
- 0 不检查
- 1 先检查
- 2 后检查
-
-
编辑完后使用mount -a挂载测试,如果有错将导致系统启动失败
-
-
通过脚本文件
-
vim /etc/rc.d/rc.local
- mount /dev/sdb1 /mnt/sdb1
-
chmod +x /etc/rc.d/rc.local
-
开机过程中执行的一个脚本,不会影响系统启动。注意加上执行权限
-
交换分区
作用
- 用硬盘空间当作内存使用防止OOM内存溢出
查看swap
- free -m
- top
- swapon -s
- swapon -d
制作方法
-
用分区实现
-
1.准备新分区
- /dev/sdb2
-
2.格式化成swap分区
- mkswap /dev/sdb2
-
3.激活swap分区
- swapon /dev/sdb2
-
4.查看swap分区
- swapon -s
-
5.开机挂载
- vim /etc/fstab
/dev/sdb2 swap swap defaults 0 0
- vim /etc/fstab
-
-
用文件实现
-
1.使用/dev/zero设备制作1G的/tmp/swap.txt文件
- dd if=/dev/zero of=/tmp/swap bs=1M count=1024
ll /tmp/swap -h
- dd if=/dev/zero of=/tmp/swap bs=1M count=1024
-
2.格式化成swap分区
- mkswap /tmp/swap
-
3.激活swap
- swapon /tmp/swap.txt
-
4.查看swap分区
- swapon -d
-
5.开机挂载
- vim /etc/fstab
/tmp/swap.txt swap swap defaults 0 0
- vim /etc/fstab
-
-
dd
-
复制文件,根据设置参数转换为文件命令
- if: input file|device 从 file|device中读取
- of: output file|device 写到file|device里去
- bs: blocksize 块的大小
- count:块的数量
-
/dev/zero 无限0资源设备
-
/dev/null 垃圾桶 黑洞设备文件
-
卸载swap
-
1.让swap无效
- swapoff /dev/sdb2
- swapoff /tmp/swap.txt
- swapoff -a 关闭所有
-
2.删除/etc/fstab配置文件内的设置
-
3.删除交换文件
- rm -rf /tmp/swap.txt
磁盘阵列
介绍
- RAID独立的磁盘冗余阵列,将多块物理磁盘按照不同的方式组合起来形成一个硬盘组,从而提供比单个磁盘更高的存储性能和安全性
- 组成raid的不同方式称为raid的级别,常见级别:0 1 5 6 10 50
raid的分类
-
软raid
- 用软件实现,为了提高速度,所有操作都是通过操作系统及cpu实现
-
硬raid
-
通过硬件来实现
- 1.主板集成raid
- 2.阵列卡做raid
-
raid级别
-
raid 0
- 条带集,将数据分散存储到多个磁盘(同时读写),磁盘利用率100%,存储性能最高,但无数据保护
-
raid 1
- 镜像集,将数据全部复制到另一块磁盘备份,读写性能较差,利用率最低,数据安全性最高
-
raid 5
- 带奇偶校验条带集,数据块和对应校验信息存放在不同磁盘,可通过校验码及其他盘恢复一块损坏盘数据,多个磁盘可同时写入,综合性能最佳
-
raid 10
- 先将4块硬盘做成两组raid1,再将两组raid1做成raid0
制作软raid
-
命令
-
mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sd{b…e}
- -C, --create 创建阵列
- -n 指定设备数量,后面跟上设备列表
- -x 指定备盘
- -l 指定raid的级别
- -v 显示创建过程
- -D 查看raid的详细信息
-
-
查看创建好的raid阵列
- mdadm -D /dev/md5
- cat /proc/mdstat
-
格式化制作文件系统
- mkfs.xfs /dev/md5
-
挂载
- mount /dev/md5 /md5
-
测试
- mdadm -f /dev/md5 /dev/sdc #指定一个磁盘为坏磁盘(仅模拟)
- mdadm -r /dev/md5 /dev/sdc #热拔(删除)/dev/sdc
- mdadm -a /dev/md5 /dev/sdf#添加新设备到raid阵列
-
关闭
- umount /dev/md5
- mdadm -S /dev/md5
-
启动
- mdadm -Ds > /etc/mdadm.conf #将当前raid信息保存至配置文件,已便以后进行装配
- mdadm -A /dev/md5
-
删除
-
1.先卸载
-
2.停止阵列
-
3.删除配置文件
-
4.清除成员的元数据
- mdadm --zero-superblock /dev/sd{b…f}
-
LVM逻辑卷管理
概念
- 物理卷PV:单个硬盘或分区做成
- 物理区域PE:PV中的最小存储单元,指定后不可更改,同一卷组中PV的PE大小需一致
- 卷组VG:单个或多个物理卷组成
- 逻辑卷LV:从卷组中获取空间,可格式化挂载使用,支持在线扩容
- 逻辑区域LE:LV中的最小存储单元,大小取决于PE
创建
-
1.准备物理磁盘/分区
-
2.创建PV:pvcreate /dev/sdb
-
3.创建VG:vgcreate vg1 /dev/sdb
-
4.创建LV
- lvcreate -L 4G -n lv1 vg1
- lvcreate -l 10 -n lv1 vg1
- #-l 指定PE数量;-L指定具体空间
-
5.创建文件系统并挂载
- mkfs.xfs /dev/vg1/lv1
- mount /dev/vg1/lv1 /mnt/lv1
查看
- pvs/pvscan/pvdisplay
- vgs/vgscan/vgdisplay
- lvs/lvscan/lvdisplay
扩容
-
pv扩容>vg扩容>lv扩容>文件系统扩容
-
1.pv扩容:添加磁盘/分区,pvcreate /dev/sdc 创建pv (有空间则省略)
-
2.vg扩容:vgextend vg1 /dev/sdc vgs查看剩余空间 (有空间则省略)
-
3.lv扩容:lvextend -L +5G /dev/vg1/lv1 #增加5G / -l +10
-
4.文件系统扩容
-
xfs系统
- xfs_growfs /dev/vg1/lv1 #也可写挂载点
-
ext系统
- resize2fs /dev/vg1/lv1
-
若lv未被使用则省略
-
缩容
-
注意
- 1.风险大有可能造成数据的损坏
- 2.确保缩减后的空间大小依然能存储原来的所有数据
- 3.不要在线缩容
- 4.在缩减之前强制检查文件系统
-
ext4缩容
- 1)先卸载:umount /lv0
- 2)强制检查文件系统:e2fsck -f /dev/vg0/lv0
- 3)缩减文件系统:resize2fs /dev/vg0/lv0 1800M
- 4)缩减逻辑卷:lvreduce -L 1800M /dev/vg0/lv0
- 5)测试缩减逻辑卷后逻辑卷能否正常使用
-
XFS不支持缩容
删除
- lvremove /dev/vg1/lv2
- vgremove vg1
- pvremove /dev/sdb
改名
- vgrename
- lvrename
快照
-
工作原理
- LVM中snapshot通过“写时复制”(copy on write) 来实现,即当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data);创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里。
- 改变数据包括:增、删、改,增加时会生成一个字符设备文件用于标记该文件原始不存在
-
实验步骤
- 1.挂载lv0逻辑卷,在逻辑卷内写入数据:mount /dev/vg0/lv0 /lv0
- 2.给/dev/vg0/lv0逻辑卷做快照:lvcreate -n lv0.snap -s -L 800M /dev/vg0/lv0
- 3.改变lv0逻辑卷的数据
- 4.恢复数据 会删除快照卷 恢复之前要卸载
umount /dev/vg0/lv0;lvconvert --merge /dev/vg0/lv0.snap - 5.挂载lv0逻辑卷查看数据是否恢复到拍快照的那一刻的状态
杂七杂八
改变根
- chroot /test #将/test目录作为根
查看程序所依赖的库
- ldd /bin/cat
备份MBR
-
注意
- MBR一定要备份在另外的磁盘上
-
实验
-
备份/dev/sda的MBR
-
步骤
-
- 将/dev/sda的MBR备份到/dev/sdb1
- mount /dev/sdb1 /mnt/
- dd if=/dev/sda of=/mnt/MBR.bak bs=512 count=1
-
- 破坏/dev/sda的MBR
- dd if=/dev/zero of=/dev/sda bs=512 count=1
-
- 重启系统,发现已经无法启动
-
- 进入救援模式,恢复/dev/sda的MBR
- mkdir /sdb1
- mount /dev/sdb1 /sdb1
- dd if=/sdb1/MBR.bak of=/dev/sda
-
reboot
-
-