Linux基础-11-磁盘存储+文件系统
磁盘结构
并行:
- IDE:133MB/s
- SCSI:640MB/s
串口:
- SATA:6Gbps
- SAS:6Gbps
- USB:480MB/s
机械硬盘和固态硬盘
- 机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘 中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有 一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制 器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每 分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数 据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。 硬盘为精密设备,进入硬盘的空气必须过滤
- 固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、 功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
- 相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传 输速率性能是HDD的2倍
- 相较于SSD,HDD在价格、容量占有绝对优势
- 硬盘有价,数据无价,目前SSD不能完全取代HHD
设备文件
一切皆文件:open(), read(), write(), close()
设备类型:
- 块设备:block,存取单位“块”,磁盘
- 字符设备:char,存取单位“字符”,键盘
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备号码:
- 主设备号:major number, 标识设备类型
- 次设备号:minor number, 标识同一类型下的不同设备
磁盘设备的设备文件命名:/dev/DEV_FILE
SCSI, SATA, SAS, IDE,USB: /dev/sd
虚拟磁盘:/dev/vd 、/dev/xvd
不同磁盘标识:a-z,aa,ab…
- /dev/sda, /dev/sdb, …
同一设备上的不同分区:1,2, …
- /dev/sda1, /dev/sda5
硬盘存储术语
- head:磁头
- track:磁道
- sector:扇区,512bytes
- cylinder:柱面
机械硬盘结构
分区
概念
- 优化I/O性能
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
分区方式
- 两种分区方式:MBR,GPT
- MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
- 如何分区:按柱面
- 0磁道0扇区:512bytes
- 446bytes: boot loader
- 64bytes:分区表,其中每16bytes标识一个分区
- 2bytes: 55AA 结束标志
- MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区
- 硬盘主引导记录MBR由4个部分组成
- 主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序
- 出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节
- 分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH, 每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
- 结束标志字,偏移地址01FE–01FF的2个字节值为结束标志55AA
DPT结构
GPT分区
- GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区, 使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)
- 使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表 自动备份在头和尾两份,并有CRC校验位
- UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持 GPT,使操作系统启动
EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域
BIOS和UEFI
- BIOS是固化在电脑主板上一个程序,主要用于开机系统自检和引导操作系统。 目前新式的电脑基本上都是UEFI启动
- BIOS(Basic Input Output System 基本输入输出系统)对于普通用户来说, 主要完成系统硬件自检和引导操作系统,操作系统开始启动之后,BIOS的任务就完成了。系统硬件自检:如果系统硬件有故障,主板上的扬声器就会发出长 短不同的“滴滴”音,可以简单的判断硬件故障,比如“1长1短”通常表示内 存故障,“1长3短”通常表示显卡故障
- BIOS在1975年就诞生了,使用汇编语言编写,当初只有16位,因此只能访问 1M的内存,其中前640K称为基本内存,后384K内存留给开机和各类BIOS本身使用。BIOS只能识别到主引导记录(MBR)初始化的硬盘,最大支持2T的硬盘, 4个主分区(逻辑分区中的扩展分区除外),而目前普遍实现了64位系统,传统 的BIOS已经无法满足需求了,这时英特尔主导的EFI就诞生了。
- EFI(Extensible Firmware Interface)可扩展固件接口,是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前) 在所有平台上一致的、正确指定的启动服务,被看做是BIOS 的继任者。
- UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作 Unified EFI Form的国际组织
- UEFI(Unified Extensible Firmware Interface)统一的可扩展固件接口, 是一种详细描述类型接口的标准。UEIF相当于一个轻量化的操作系统,提供了硬件和操作系统之间 的一个接口,提供了图形化的操作界面。最关键的是引入了GPT分区表,支持2T以上 的硬盘,硬盘分区不受限制
- BIOS和UEFI区别
- BIOS采用了16位汇编语言编写,只能运行在16位实模式下,可访问的内存空间为 1MB,只支持字符操作界面。
- UEFI采用32位或者64位的C语言编写,突破了实模式的限制,可以达到最大的寻址空间,支持图形操作界面
BIOS+MBR与UEFI+GPT
管理分区
- 列出块设备
- lsblk
- 创建分区使用:
- fdisk 创建MBR分区
- gdisk 创建GPT分区
- parted 高级分区操作
- 重新设置内存中的内核分区表版本
- partprobe
parted命令
- parted的操作都是实时生效的,小心使用
- 用法:parted [选项]… [设备 [命令 [参数]…]…]
- parted /dev/sdb mklabel gpt|msdos
- parted /dev/sdb print
- parted /dev/sdb mkpart primary 1 200 (默认M)
- parted /dev/sdb rm 1
- parted –l 列出分区信息
分区工具fdisk和gdisk
- gdisk /dev/sdb 类fdisk 的GPT分区工具
- fdisk -l [-u] [device…] 查看分区
- fdisk /dev/sdb 管理分区
- 子命令:
- p 显示现有分区列表
- t 更分区类型
- n 创建新分区
- d 删除分区
- v 校验分区
- u 转换单位
- l 查看所有已知ID
- w 保存并退出
- q 不保存并退出
同步分区表
查看内核是否已经识别新的分区
cat /proc/partations
centos6通知内核重新读取硬盘分区表
新增分区用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
删除分区用
partx -d –nr M-N /dev/DEVICE
CentOS 5,7,8: 使用partprobe
- partprobe [/dev/DEVICE]
磁盘容量配额
参考博客:
https://www.cnblogs.com/sddai/p/11111895.html
Linux quota命令用于显示磁盘已使用的空间与限制。
执行quota指令,可查询磁盘空间的限制,并得知已使用多少空间。
参数说明:
- -g 列出群组的磁盘空间限制。
- -q 简明列表,只列出超过限制的部分。
- -u 列出用户的磁盘空间限制。
- -v 显示该用户或群组,在所有挂入系统的存储设备的空间限制。
- -V 显示版本信息。
quota命令还有软限制和硬限制的功能。
- 软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
- 硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
1 | [root@localhost ~]# vim /etc/fstab |
xfs_quota
专门针对XFS文件系统来管理quota磁盘容量配额服务
xfs_quota [参数] 配额 文件系统
- -c参数用于以参数的形式设置要执行的命令
- -x参数是专家模式
硬盘使用量的软限制和硬限制分别为3MB和6MB;创建文件数量的软限制和硬限制分别为3个和6个。
1 | [root@localhost ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 |
1 | [root@localhost ~]# su - test |
edquota
用于编辑用户的quota配额限制
edquota [参数] [用户]
- -u参数表示要针对哪个用户进行设置
- -g参数表示要针对哪个用户组进行设置
把用户test的硬盘使用量的硬限额从5MB提升到8MB
1 | [root@localhost ~]# edquota -u test |
文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
支持的文件系统:/lib/modules/kernel/fs
各种文件系统:
文件系统类型
Linux文件系统:
- ext2(Extended file system):适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分区
- ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常 中恢复。它通常被用作通用的文件系统
- ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
- xfs:SGI,支持最大8EB的文件系统。是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。
- btrfs(Oracle), reiserfs, jfs(AIX), swap
光盘:iso9660
Windows:FAT32, NTFS,exFAT
Unix:FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统
文件系统分类
根据其是否支持”journal”功能:
- 日志型文件系统: ext3, ext4, xfs, …
- 非日志型文件系统: ext2, vfat
文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虚拟文件系统:VFS
查前支持的文件系统:
cat /proc/filesystems
VFS
计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个VFS(Virtual File System,虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。
文件系统选择
类型 | 支持限制 | Root分区 | Boot分区 | 注释 |
---|---|---|---|---|
单节点 | ||||
XFS | 500TB | Yes | Yes | 默认分区格式 |
Ext4 | 50TB | Yes | Yes | 兼容Ext3,Ext2 |
Brtfs | 50TB | Yes | Yes | 技术预览 |
网络/多节点 | ||||
GFS2 | 2-16个节点 | Yes | Yes | 集群文件共享存储 |
Windows无法识别Linux的文件系统,因此,存储设备需要两种系统之间交叉使用时,应该使用windows和Linux同时支持的文件系统:fat32(vfat)
创建文件系统
mkfs命令:
mkfs.FS_TYPE /dev/DEVICE
- ext4
- xfs
- btrfs
- vfat
mkfs -t FS_TYPE /dev/DEVICE
- -L ‘LABEL’ 设定卷标
mke2fs:ext系列文件系统专用管理工具
- -t {ext2|ext3|ext4} 指定文件系统类型
- -b {1024|2048|4096} 指定块大小
- -L ‘LABEL’ 设置卷标
- -j 相当于 -t ext3
- mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
- -i 为数据空间中每多少个字节创建一个inode;不应该小于block大小
- -N 指定分区中创建多少个inode
- -I 一个inode记录占用的磁盘空间大小,128—4096
- -m # 默认5%,为管理人员预留空间占总空间的百分比
- -O FEATURE[,…] 启用指定特性
- -O ^FEATURE 关闭指定特性
格式化后会发生如下事情
- Linux创建一个硬盘地图’superblock’,记录此filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码,默认一个inode表格128字节,一个block记录消耗4B,记录满了后会新建inode用于扩展。
- 该文件的访问权限(read、write、execute);
- 该文件的所有者与所属组(owner、group);
- 该文件的大小(size);
- 该文件的创建或内容修改时间(ctime);
- 该文件的最后一次访问时间(atime);
- 该文件的修改时间(mtime);
- 文件的特殊权限(SUID、SGID、SBIT);
- 该文件的真实数据地址(point)。
- block:用于存储数据
文件系统标签
- 指向设备的另一种方法
- 与设备无关
- blkid:块设备属性信息查看
- blkid [OPTION]… [DEVICE]
- -U UUID 根据指定的UUID来查找对应的设备
- -L LABEL 根据指定的LABEL来查找对应的设备
- e2label:设定和管理ext系列文件系统的LABEL
- e2label DEVICE [LABEL]
- findfs :查找分区
- findfs [options] LABEL=<label>
- findfs [options] UUID=<uuid>
查看调整文件系统
tune2fs:重新设定ext系列文件系统可调整参数的值,注意:块大小创建后不可修改
- -l 查看指定文件系统超级块信息;super block
- -L ‘LABEL’ 修改卷标
- -m 修预留给管理员的空间百分比
- -j 将ext2升级为ext3
- -O 文件系统属性启用或禁用, –O ^has_journal
- -o 调整文件系统的默认挂载选项,–o ^acl
- -U UUID 修改UUID号
dumpe2fs:显示ext文件系统信息,将磁盘块分组管理
- -h:查看超级块信息,不显示分组信息
xfs_info:显示已挂载的 xfs 文件系统信息
- xfs_info mountpoint
超级块和INODETABLE
文件系统检测和修复
- 文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
- 注意:一定不要在挂载状态下执行下面命令修复
- fsck: File System Check
- fsck.FS_TYPE
- fsck -t FS_TYPE
- 注意:FS_TYPE 一定要与分区上已经文件类型相同
- -a 自动修复
- -r 交互式修复错误
- e2fsck:ext系列文件专用的检测修复工具
- -y 自动回答为yes
- -f 强制修复,即使文件系统处于clean状态
- -p 自动进行安全的修复文件系统问题
- xfs_repair:xfs文件系统专用检测修复工具
- -f 修复文件,而设备
- -n 只检查
- -d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
挂载&虚拟内存
- 根文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”﹔此目录即为“挂载点”
- 卸载:为解除此关联关系的过程
- 把设备关联挂载点:mount Point
- mount 设备名 挂载点
- 卸载时:可使用设备,也可以使用挂载点
- umount 设备名|挂载点
- 挂载点下原有文件在挂载完成后会被临时隐藏
- 挂载点目录一般为空
用mount命令挂载文件系统
挂载方法:mount DEVICE MOUNT_POINT
mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
mount [-fnrsvw] [-t vfstype] [-o options] device dir
- device:指明要挂载的设备;
设备文件:例如/dev/sda5
卷标:-L ‘LABEL’, 例如 -L ‘MYDATA’
UUID, -U ‘UUID’:例如 -U ‘0c50523c-43f1-45e7- 85c0-a126711d406e’
伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir:挂载点
- 事先存在,建议使用空目录
- 进程正在使用中的设备无法被卸载
查看当前系统所有已挂载的设备
- mount
- cat /etc/matb
- cat /proc/mounts
mount常用命令选项
-t vsftype 指定要挂载的设备上的文件系统类型,多数情况下可省略,会通过blkid来判断要挂载的设备的文件系统类型
-r readonly,只读挂载
-w read and write, 读写挂载
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L ‘LABEL’ 以卷标指定挂载设备
-U ‘UUID’ 以UUID指定要挂载的设备
-B, –bind 绑定目录到另一个目录上
查看内核追踪到的已挂载的所有设备
- cat /proc/mounts
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
- async 异步模式 sync 同步模式,内存更改时,同时写磁盘
- atime/noatime 是否更新文件或目录的访问时间戳
- diratime/nodiratime 是否更新目录的访问时间戳
- auto/noauto 是否支持自动挂载,是否支持-a选项
- exec/noexec 是否支持在此文件系统上运行应用程序
- dev/nodev 是否支持在此文件系统上使用设备文件
- suid/nosuid 是否支持suid和sgid权限
- remount 重新挂载
- ro 只读
- rw 读写
- user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
- acl 启用此文件系统上的acl功能
- loop 使用loop设备
defaults:相当于rw, suid, dev, exec, auto, nouser, async
卸载命令
- 查看挂载情况
- findmnt MOUNT_POINT|device
- 查看正在访问指定文件系统的进程
- lsof MOUNT_POINT
- fuser -v MOUNT_POINT
- 终止所有在正访问指定的文件系统的进程
- fuser -km MOUNT_POINT
- 卸载
- umount DEVICE | umount MOUNT_POINT
- -a 卸除/etc/mtab中记录的所有文件系统。
- -f 强制卸载(对于无法访问的NFS系统)
- -v 执行时显示详细的信息
- umount DEVICE | umount MOUNT_POINT
挂载点和/etc/fstab
- 配置文件系统体系
- 被mount、fsck和其它程序使用
- 系统重启时保留文件系统体系
- 可以在设备栏使用文件系统卷标
- 使用mount -a 命令挂载/etc/fstab中的所有文件系统
文件挂载配置文件
- /etc/fstab每行定义一个要挂载的文件系统
- 1、要挂载的设备或伪文件系统
- 设备文件
- LABEL:LABEL=””
- UUID:UUID=””
- 伪文件系统名称:proc, sysfs
- 2、挂载点 (swap类型的设备挂载点为swap)
- 3、文件系统类型:ext4,xfs,iso9660,nfs,none
- 4、挂载选项:defaults ,acl,bind,notime,noexec
- 5、转储频率:0:不做备份 1:每天转储 2:每隔一天转储
- 6、fsck检查的文件系统的顺序:允许的数字是0 1 2
- 0:不自检
- 1:首先自检;一般只有rootfs才用
- 2:非rootfs使用
处理交换文件和分区
- swap交换分区是系统RAM的补充,Swap 分区支持虚拟内存。当没有足够的RAM 保存系统处理的数据时会将数据写入 swap 分区
- 当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。配置过多swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存泄露
- 推荐系统 swap 空间
挂载交换分区
- 基本设置包括:
- 创建交换分区或者文件
- 使用mkswap写入特殊签名
- -L LABEL:指明卷标
- -f:强制
- 在/etc/fstab文件中添加适当的条目
- 启用:swapon
- swapon [OPTION]… [DEVICE]
- -a:激活所有的交换分区,定义在/etc/fstab文件中的所有swap设备
- -p PRIORITY:指定优先级
- /etc/fstab 在第4列中:pri=value
- swapon [OPTION]… [DEVICE]
- 禁用:swapoff [OPTION]… [DEVICE]
swap的优先级
- 可以指定swap分区0到32767的优先级,值越大优先级越高
- 如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
- 先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
- 优化性能:分布存放,高性能磁盘存放
移动介质
- 挂载意味着使外来的文件系统看起来如同是主目录树的一部分
- 访问前,介质必须被挂载
- 摘除时,介质必须被卸载
- 按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软
盘、USB等等) - 挂载点通常在/media 或/mnt下
使用光盘
- 在图形环境下自动启动挂载/run/media/<user>/<label>
- 否则就必须被手工挂载
- mount -r /dev/cdrom /mnt/
- 操作光盘:
- eject 弹出光盘
- eject -t 弹入光盘
- 创建ISO文件
- cp /dev/cdrom /root/centos.iso
- mkisofs -r -o /root/etc.iso /etc
- 刻录光盘
- wodim –v –eject centos.iso
挂载USB介质
- 查看USB设备是否识别
- lsusb
- 被内核探测为SCSI设备
- /dev/sdaX、/dev/sdbX或类似的设备文件
- 在图形环境中自动挂载
- 图标在[计算机]窗口中创建
- 挂载在/run/media/<user>/<label>
- 手动挂载
- mount /dev/sdb1 /mnt
常见工具
文件系统空间占用等信息的查看工具
- df [OPTION]… [FILE]…
- -l 只显示本地文件系统的相关内容
- -H 以10为单位
- -T 文件系统类型
- -h human-readable
- -i inodes instead of blocks
- -P 以Posix兼容的格式输出
- df [OPTION]… [FILE]…
查看某目录总体空间占用状态
- du [OPTION]… DIR
- -h human-readable
- -s summary
- –max-depth=# 指定最大目录层级
- du [OPTION]… DIR
dd 命令:convert and copy a file
用法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#- if=file 从所命名文件读取而不是从标准输入
- of=file 写到所命名的文件而不是到标准输出
- ibs=size 一次读size个byte
- obs=size 一次写size个byte
- bs=size block size, 指定块大小(既是是ibs也是obs)
- cbs=size 一次转化size个byte
- skip=blocks 从开头忽略blocks个ibs大小的块
- seek=blocks 从开头忽略blocks个obs大小的块
- count=n 复制n个bs
- conv=conversion[,conversion…] 用指定的参数转换文件
转换参数:
- ascii 转换 EBCDIC 为 ASCII
- ebcdic 转换 ASCII 为 EBCDIC
- lcase 把大写字符转换为小写字符
- ucase 把小写字符转换为大写字符
- nocreat 不创建输出文件
- noerror 出错时不停止
- notrunc 不截短输出文件
- sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
- fdatasync 写完成前,物理写入输出文件
备份MBR:
- dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader
- dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
有一个大于2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,实现如下
- dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
备份:
- dd if=/dev/sdx of=/dev/sdy
将本地的/dev/sdx整盘备份到/dev/sdy - dd if=/dev/sdx of=/path/to/image
将/dev/sdx全盘数据备份到指定路径的image文件 - dd if=/dev/sdx | gzip >/path/to/image.gz
备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
恢复:
- dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘 - gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘
拷贝内存资料到硬盘
- dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
- dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
- dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
RAID
概念
- RAID:Redundant Arrays of Inexpensive(Independent) Disks
- 1988年由加利福尼亚大学伯克利分校(University of California-Berkeley) “A Case for Redundant Arrays of Inexpensive Disks”
- 多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供
- 提高IO能力
- 磁盘并行读写
- 提高耐用性
- 磁盘冗余来实现
- 级别:多块磁盘组织在一起的工作方式有所不同
- RAID实现的方式
- 外接式磁盘阵列:通过扩展卡提供适配能力
- 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
- 软件RAID:通过OS实现
RAID级别
- RAID-0:条带卷,strip
- RAID-1:镜像卷,mirror
- RAID-2
- ..
- RAID-5
- RAID-6
- RAID-10
- RAID-01
RAID-0
读、写性能提升
可用空间:N*min(S1,S2,…)
无容错能力
最少磁盘数:2, 2+
RAID-1
读性能提升、写性能略有下降
可用空间:1*min(S1,S2,…)
有冗余能力
最少磁盘数:2, 2N
RAID-4
- 多块数据盘异或运算值存于专用校验盘
RAID-5
读、写性能提升
可用空间:(N-1)*min(S1,S2,…)
有容错能力:允许最多1块磁盘损坏
最少磁盘数:3, 3+
RAID-6
读、写性能提升
可用空间:(N-2)*min(S1,S2,…)
有容错能力:允许最多2块磁盘损坏
最少磁盘数:4, 4+
RAID-10
读、写性能提升
可用空间:N*min(S1,S2,…)/2
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4, 4+
RAID-01
多块磁盘先实现RAID0,再组合成RAID1
RAID-50
多块磁盘先实现RAID5,再组合成RAID0
JBOD
JBOD:Just a Bunch Of Disks
功能:将多块磁盘的空间合并一个大的连续空间使用
可用空间:sum(S1,S2,…)
RAID-7
- 可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式
常用级别
RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD
软RAID
- mdadm:为软RAID提供管理界面
- 为空余磁盘添加冗余
- 结合内核中的md(multi devices)
- RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
实现
命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6,RAID10
模式:
- 创建:-C
- 装配:-A
- 监控:-F
- 管理:-f, -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意块设备
-C: 创建模式
- -n #: 使用#个块设备来创建此RAID
- -l #:指明要创建的RAID的级别
- -a {yes|no}:是否自动创建目标RAID设备的设备文件
- -c CHUNK_SIZE: 指明块大小,单位k
- -x #: 指明空闲盘的个数
-Q:显示raid的摘要信息
mdadm -Q /dev/md#
-D:显示raid的详细信息
mdadm -D /dev/md#
管理模式:
- -f: 标记指定磁盘为损坏
- -a: 添加磁盘
- -r: 移除磁盘
观察md的状态:
- cat /proc/mdstat
- ll /dev | grep ‘md’
示例
使用mdadm创建并定义RAID设备
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1用文件系统对每个RAID设备进行格式化
mkfs.xfs /dev/md0测试RAID设备
使用mdadm检查RAID设备的状况
mdadm –detail|D /dev/md0增加新的成员
mdadm –G /dev/md0 –n4 -a /dev/sdf1停止并删除raid
1
2
3
4
5umount /mnt/md0
mdadm -S /dev/md0
rm -f /etc/mdadm.conf(只有一个RAID可以整个文件删除,如果没有就只删除对应的RAID)
mdadm --zero-superblock /dev/sd{b,c,d,e}
vim /etc/fstab清除对应的RAID那行信息组建raid10阵列
添加四块磁盘
1 | [root@template ~]# mdadm -Cv /dev/md0 -a yes -l 10 -n 4 /dev/sdb /dev/sdc /dev/sdd /dev/sde |
把制作好的RAID磁盘阵列格式化为xfs格式
1 | [root@template ~]# mkfs.xfs /dev/md0 |
创建挂载点然后把硬盘设备进行挂载操作
1 | [root@template ~]# mkdir RAID |
查看/dev/md0磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效。
1 | [root@template ~]# mdadm -D /dev/md0 |
测试和修复
模拟磁盘故障
mdadm /dev/md0 -f /dev/sda11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37[root@template ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@template ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Dec 5 14:15:44 2020
Raid Level : raid10
Array Size : 10475520 (9.99 GiB 10.73 GB)
Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Dec 5 14:19:04 2020
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : template:0 (local to host template)
UUID : 4a4746be:d4a1b1d0:5c56e36d:367fa4f8
Events : 21
Number Major Minor RaidDevice State
- 0 0 0 removed
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
0 8 16 - faulty /dev/sdb在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/RAID目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。
1
2
3
4[root@template ~]# umount /root/RAID/
[root@template ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
[root@template ~]# mount -a移除磁盘
mdadm /dev/md0 –r /dev/sda1从软件RAID磁盘修复磁盘故障
- 替换出故障的磁盘然后开机
- 在备用驱动器上重建分区
- mdadm /dev/md0 -a /dev/sda1
mdadm、/proc/mdstat及系统日志信息
磁盘阵列+备份盘
部署RAID 5磁盘阵列时,至少需要用到3块硬盘,还需要再加一块备份硬盘,所以总计需要在虚拟机中模拟4块硬盘设备
现在创建一个RAID 5磁盘阵列+备份盘。在下面的命令中,参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。
1 | [root@template ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde |
将部署好的RAID 5磁盘阵列格式化为xfs文件格式,然后挂载到目录上,之后就可以使用了。
1 | [root@template ~]# mkfs.xfs /dev/md0 |
把硬盘设备/dev/sdb移出磁盘阵列,然后迅速查看/dev/md0磁盘阵列的状态
1 | [root@template ~]# mdadm /dev/md0 -f /dev/sdb |
管理
- 生成配置文件:mdadm –D –s >> /etc/mdadm.conf
- 停止设备:mdadm –S /dev/md0
- 激活设备:mdadm –A –s /dev/md0 激活
- 强制启动:mdadm –R /dev/md0
- 删除raid信息:mdadm –zero-superblock /dev/sdb1
逻辑卷管理器(LVM)
允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
允许在多个物理设备间重新组织文件系统
将设备指定为物理卷
用一个或者多个物理卷来创建一个卷组
物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
在物理卷上创建的逻辑卷
是由物理区域(PE)组成
可以在逻辑卷上创建文件系统
介绍
LVM: Logical Volume Manager, Version 2
dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
设备名:/dev/dm-#
软链接:
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME
/dev/vol0/root
基本术语
- 物理存储介质: 系统上的/dev/sda
- 物理卷: PV /dev/sda1 /dev/sdb1…
- 卷组: VG 由多个PV组成的存储资源池
- 逻辑卷: LV 从VG中拿存储资源直接使用
- PE: 物理卷被划分成PE的基本单元(每个PE默认为4MB)
- LE: 逻辑卷被划分成LE的基本单位(同一个卷组中 LE和PE相同的)
- 具体请看https://cloud.tencent.com/developer/article/1108097
更改文件系统的容量
LVM可以弹性的更改LVM的容量通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的
设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量
pv管理工具
- 显示pv信息
- pvs:简要pv信息显示
- pvdisplay xxx
- 创建pv
- pvcreate /dev/DEVICE
- -v 显示过程
- -f 强制
- -u 指定uuid
- pvcreate /dev/DEVICE
- 删除pv
- pvremove /dev/DEVICE
vg管理工具
- 显示卷组
- vgs
- vgdisplay xxx
- 创建卷组
- vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
- 管理卷组
- vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…] 拓展vg大小
- vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…] 减小vg大小
- 删除卷组
- 先做pvmove,再做vgremove
lv管理工具
- 显示逻辑卷
- lvs
- lvdisplay
- 创建逻辑卷
- lvcreate -L #[mMgGtT] -n NAME VolumeGroup
- lvcreate -l 60%VG -n mylv testvg
- lvcreate -l 100%FREE -n yourlv testvg
- 删除逻辑卷
- lvremove /dev/VG_NAME/LV_NAME
- 重设文件系统大小
- fsadm [options] resize device [new_size[BKMGTEP]]
- resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
- xfs_growfs /mountpoint
创建逻辑卷实例
- 创建物理卷
- pvcreate /dev/sda3
- 为卷组分配物理卷
- vgcreate vg0 /dev/sda3
- 从卷组创建逻辑卷
- lvcreate -L 256M -n data vg0
- mkfs.xfs /dev/vg0/data
- 挂载
- mount /dev/vg0/data /mnt/data
扩展和缩减逻辑卷
扩展逻辑卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
e2fsck /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
缩减逻辑卷:
- umount /dev/VG_NAME/LV_NAME
- e2fsck /dev/VG_NAME/LV_NAME
- resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
- lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
- mount -a
跨主机迁移卷组
- 源计算机上
- 1 在旧系统中,umount所有卷组上的逻辑卷
- 2 禁用卷组
- vgchange –a n vg0
- lvdisplay
- 3 导出卷组
- vgexport vg0
- pvscan
- vgdisplay
- 拆下旧硬盘
- 在目标计算机上
- 4 在新系统中安装旧硬盘,并导入卷组:vgimport vg0
- 5 vgchange –ay vg0 启用
- 6 mount所有卷组上的逻辑卷
逻辑卷管理器快照
快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝
对于需要备份或者复制的现有数据临时拷贝以及其它操作来说,快照是最合适的选择
快照只有在它们和原来的逻辑卷不同时才会消耗空间
- 在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
- 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
- 快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
- 建立快照的卷大小小于等于原始逻辑卷,也可以使用lvextend扩展快照
快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享
由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG中.系统恢复的时候的文件数量不能高于快照区的实际容量
使用LVM快照
为现有逻辑卷创建快照
lvcreate-L #[mMgGtT]-pr -s -n snapshot_lv_name original_lv_name
lvcreate -L 64 -s -n data-snapshot -p r /dev/vg0/data
挂载快照
- mkdir -p /mnt/snap
- mount -o ro /dev/vg0/data-snapshot /mnt/snap
恢复快照
- umount /dev/vg0/data-snapshot
- umount /dev/vg0/data
- lvconvert –merge /dev/vg0/data-snapshot
删除快照
- umount /mnt/databackup
- lvremove /dev/vg0/databackup
Brtfs文件系统
支持写时复制,用来取代ext3/ext4
核心特性
- 多物理卷支持:btrfs可由多个底层物理卷组成,支持RAID,以联机“添加”、“移除”、“修改”
- 写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新
- 数据及元数据校验码:chesksum
- 子卷:sub_volume
- 快照:支持快照的快照
- 透明压缩
文件系统创建
mkfs.btrfs
- -L ‘LABEL’
- -d <type>:raid0,raid1,raid5,raid6,raid10,single
- -m <profile>:raid0,raid1,raid5,raid6,raid10,single,dup
- -O<feature>:
- -O list-all:列出支持的所有feature
属性查看
- btrfs filesystem show
挂载文件系统
- mount -t btrfs /dev/sdb MOUNT_POINT
透明压缩机制
- mount -o compress={lzo|zlib} DEVICE MOUNT_POINT