一、磁盘相关概念 1、I/O端口(I/O Ports) CPU与外围设备的数据交换称为输入/输出(I/O),I/O端口是CPU与外围设备(如输入输出设备)交换数据的场所,是I/O设备 的地址。 2、块设备|字符设备|伪设备 I/O设备分为块设备和字符设备。 块设备:系统能够随机的相对独立的读取每一个数据块,通常使用缓存机制,和系统进行数据交换,磁盘是典型的块设备。 字符设备:每次与系统只能传输一个字符,字符设备不使用缓存区,系统直接从设备读取字符,例如键盘。 伪设备:/dev/null /dev/full /dev/loop /dev/zero /dev/random /dev/urandom 3、驱动程序 device driver 是一个使得系统和硬件可以通信交互的程序。 4、设备文件 设备文件是驱动程序的接口,在文件系统中,表现为一个普通文件。系统通过标准输入输出与设备文件交互,进而和与之对 应的硬件进行交互。 Unix通过存放于节点结构中的主设备号和次设备号识别这些设备,这些数都是唯一的。主设备号用于指定关联驱动程序,次 设备号用于指定驱动程序控制的某一个特定设备,被相应设备的驱动程序使用。 主设备号:major number 用于指定关联驱动程序,表示不同类型的设备 次设备号:minor number 标识同一类型设备的的不同设备 例如Linux中sda磁盘的主设备号是8,用来标识硬盘,不同分区的硬盘用次设备号标识,分别是0,1,2。 brw-rw----. 1 root disk 8, 0 Jul 31 08:24 /dev/sda brw-rw----. 1 root disk 8, 1 Jul 31 08:24 /dev/sda1 brw-rw----. 1 root disk 8, 2 Jul 31 08:24 /dev/sda2 创建设备文件 mknod /path/to/file c 1 5 主 次 5、硬盘接口 IDE(ATA) 并行数据线传输数据,接口最大速度是133MB/s,但因其并口线缆的抗干扰性差,目前使用较少 SCSI 并行数据线传输,接口最大传输速度600MB/s, SATA 6Gps SAS 6Gps USB 3.0 640MB/s 6、硬盘分区 (可以不分区,直接对整个硬盘进行格式化) 1、当一个分区出现故障时,其他分区的数据不受影响 2、单个分区被数据占满,其他分区不受影响 3、可以采用不同的文件系统 4、可以安装多个操作系统 5、隔离系统和程序 6、实现磁盘空间配额限制 分区方式:MBR、GPT MBR:Master Boot Record 使用 32位 表示扇区数,分区不超过 2T GPT:Globals Unique Identifiers (没有主分区、扩展分区的概念),支持128个分区,最大支持8Z分区 分区表(DPT,Disk Partition Table) 7、主引导记录 主引导记录(Master Boot Record,缩写:MBR),又叫主引导扇区。是计算机开机后访问的第一个扇区。主引导记录的在硬 盘上的位置的0柱面、0磁道、0扇区,大小为512字节。 在这512字节中,前446字节中存放主引导记录,剩余的64字节存放分区表(DPT)每16字节标记一个分区,以及2字节的结束标 志(55AA)。 512个字节划分为三个部分: 446字节:BootLoader # 引导加载器,是一个程序,引导启动文件系统 64字节: # 每16个字节标识一个分区 2字节:Magic Number # 标记MBR是否有效 # 查看二进制MBR hexdump -C /dev/sda -n 512 8、引导程序 引导程序(bootloader),引导程序通常分为两部分:第一阶段引导程序位于主引导记录(MBR),用以引导位于某个分区上的 第二阶段引导程序,如NTLDR、BOOTMGR和GNU GRUB等。引导程序是一段程序代码。 UEFI ( 统一扩展固件接口) 硬件支持GPT 引导加载操作系统。 9、分区管理工具 用于分区的基本分配单元通常仍旧是柱面 fdisk(创建MBR分区)|parted|gdisk(创建GPT分区) 1、fdisk # 一块硬盘只能管理16个分区 选项: -u=cylinder 指定按柱面显示 2、parted (支持交互方式和非交互方式管理分区) parted /dev/sdb mklabel gpt|msdos # 将硬盘标记为gpt类型的分区或者msdos分区类型 parted /dev/sdb print # 查看磁盘分区 parted /dev/sdb mkpart primary 1 200 (默认M) # 分区 parted /dev/sdb rm 1 # 删除一个分区 parted -l # 列出分区 3、gdisk (默认管理GPT类型分区) 注:在/proc/partitions文件中存放内核识别的分区,当新建好分区后,内核并没有识别,所以这个文件中并不会显示, 使用工具可以手动通知内核识别分区。可以使用的工具有: partprobe partx kpartx 10、磁盘物理结构 head 磁头  track 磁道  cylinder 柱面 (例如:所有盘面的0磁道组成0柱面)  sector 扇区 512bytes ZBR (Xoned Bit Recording) 划分扇区结构 分区按柱面进行划分 11、磁盘寻址 CHA 最大寻址空间 8G ,采用24bit寻址,前十位表示cylinder,中间8位表示head,后面6位表示sector LBA 最大寻址 128PB,Logical block addressing 。 ================================================================================================================================================ 二、文件系统 1、元数据 Metadata 文件的时间戳、文件类型、文件所有者、所属组、权限、大小、文件数据块位置 2、文件系统 文件系统向用户提供访问存储硬件的一种机制,它实现了数据的存储、分级、访问和获取等操作 3、文件系统类型 Linux系统核心支持数十种文件系统:Btrfs、JFS、ReiserFS、ext、ext2、[ext3、ext4、XFS](常用)、ISO9660、XFS、Minx、 MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等,在Linux中文件系统是内核的模块功能。 网络文件系统:NFS、CIFS 集群文件系统:GFS、OCFS2 分布式文件系统:ceph、mogilefs、Lustre(将文件分别存放到不同的服务器) ext4:支持更大的单独文件;支持Extent机制,减少文件碎片的产生;兼容ext2、ext3文件系统;可以在数据将被写入磁盘(sync) 前才开始获取空间,提升性能;ext3的一个目录下最多只能有32000个子目录。ext4的子目录最高可达64000;日志校验机制; 快速的文件系统检查。 swap:交换分区文件系统 ISO9660:光盘文件系统 GFS:Google File System,分布式文件系统 OCFS2:由Oracle Corporation开发并根据GNU通用公共许可证发布的共享磁盘文件系统 btrfs:B-tree文件系统,Butter FS,Better FS或B-tree FS。支持写时复制WOC功能、快照等很多特性。Oracle公司 4、日志文件系统 在文件系统发生变化时,文件系统先将变化相关信息放为日志区域,然后在写入存储数据的区域内,这样的好处是,当系统突然断 电或者发生故障时,更容易进行恢复。日志型文件系统有[ext3、ext4、xfs]等。 5、格式化 高级格式化通常会更好主引导记录分区表的更改,格式化是在分区中划分出区域存放非配表以及目录表等方便用于用于管理。 6、虚拟文件系统 (VFS) Virutal FIle Systens 一个内核软件层,为不同的文件系统提供统一的调用接口。屏蔽不同文件系统的差异性,当用户使用文件系统的时候,通过VFS 对不同文件系统进行调用。(图) 7、UUID 通用唯一识别码 Universally Unique Identifier简称UUID UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为1632=2128,约等于3.4 x1038。也就是说若每纳秒产生 1兆个UUID,要花100亿年才会将所有UUID用完。 UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息 手动生成UUID: uuidgen命令 8、超级快 每个块组128M 用来存储整个文件系统的结构划分,超级块组成块组,super group。group 0 的第一个块组是超级快,之后的每个块组中第一个 块中有超级快的备份块。 8、用户空间的文件系统管理工具 Linux中查看当前系统支持的文件系统:cat /etc/filesystems 或者 在内核模块功能目录下查看/lib/modules/3.10.0-514.el7.x86_64/kernel/fs mkfs.FT 1、mkfs工具 也可以使用mkfs.ext3、mkfs.ext4 、mke2fs 也可以使用mkfs -t FILE-TYPE 进行创建文件系统 ext系列文件系统通用选项: -b # 指定数据块大小,有效的值有 1024 2048 4096 ,默认是4096 字节 (块是存放数据的最小单位) -c # 在创建文件系统之前检查设备是否存在坏块。如果此选项指定两次,-c -c 则使用较慢的读写测试,而不是快速只读测试 -F # 强制执行创建文件系统 -L # 指定卷标,可以在挂载中引用卷标 -t # 指定文件系统类型 -i N # 为数据空间中的每多少个字节创建一个inode =I N # 一个inode占用的字节数,有效值在128-4096字节,值得是128的整数倍 -N # 为分区创建多少个inode -m # 为管理员预留的空间占的百分比,默认是百分之五 -O feature # 创建文件系统时,指定文件系统属性。-O feature表示启用此feature,-O ^feature表示关闭此功能, 也可以使用mkfs.ext3、mkfs.ext4 、mke2fs 也可以使用mkfs -t FILE-TYPE 进行创建文件系统 /etc/mke2fs.conf是mke2fs的配置文件,定义了默认行为,以及文件系统属性 2、blkid工具 格式:blkid /dev/device|/path/to/file 选项: -o VALUE # 指定打印格式,值可以是device|export|full -k # 列出所有系统已知文件系统 -U UUID # 将UUID转换为设备名称,后面跟UUID -L LABEL # 将卷标转换为设备名称,后面跟LABEL 3、lsblk工具 选项: -o FORMAT1,FORMAT2 # 打印指定的名称列 4、e2label工具 管理ext系列文件系统的label信息(查看及设定) 格式:e2label device [ new-label ] 5、tune2fs工具 重新设定ext系列文件系统的可调整参数的值 选项: -l # 查看指定文件系统的超级快信息 super block -L LABEL # 设定修改卷标 -m N # 修改预留给管理员的百分比空间 -j # 将ext2升级为ext3 -r # 直接指定给超级管理员预留块数 -c N # 指定挂载次数达到#次后,进行自检,0或-1表示关闭此功能 -i N # 每挂载使用多少天后进行自检,0或者-1表示关闭,单位可以是d|m -O # 文件系统属性启用或禁用 -O [^|+]FEATURE -o # 调整文件系统的默认挂载选项 -O [^|+]MOUNT-OPTION -U UUID # 修改UUID -C # 修改[显示]的挂载次数 显示内容显示: Mount count: 29 # 挂载次数 Maximum mount count: -1 # 挂载超过多少次后进行文件系统检测 Last checked: Thu Aug 3 03:26:06 2017 # 最后一次检测时间 Check interval: 0 () # 在多长时间之内达到挂载次数最大值时进行文件系统检测 6、dump2fs工具 dunmp2fs /dev/sdaN # 查看文件系统的超级块信息 选项: -h # 只查看指定文件系统的元数据信息 7、mkswap工具 创建交换分区,创建交换分区时要将分区的ID调整的82。写进fstab文件,配置开机自动挂载。 mount -a命令不能将fstab中的swap挂载,而得使用专用命令挂载。 交换分区内存可以在/proc/swaps中看到。 选项: -L LABEL # 指定卷标 -f # 强制格式化 1、swapon/swapoff 挂载启用交换分区 启用: swapon 格式:swapon [option] DEVICE 选项: -a # 启用所有交换分区,swapon /dev/sdb1 启用交换分区 -p # 指定优先级。优先级也可以在fstab文件挂载选中指定:defaults,pri=[0-32767] 禁用:swapoff swapoff /dev/sdb1 2、注: 1、开启状态的交换分区,不能用swapon命令指定优先级。需要先停止交换分区。 2、如果启用之前没有指定优先级,则系统默认给一个负数的值。 3、手动添加的交换分区都比系统默认给的优先级的交换分区优先级高 4、如果用户没有指定,那么核心会自动给swap 指定一个优先级,这个优先级从-1 开始,每加入一个 新的没有用户指定优先级的swap ,会给这个优先级减一 5、先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级( 是正数) 永远高于核心缺省指定的优先级(负数) 9、partx工具 partx -a /dev/sdb # 将指定设备的所有分区通知内核并识别,添加分区映射 partx -s /dev/sdb # 显示所有分区信息 partx -d /dev/sdb1 # 将分区从内核识别中去除 partx -n n:m /dev/sdb # 将指定硬盘的n到m范围的分区更新识别 。示例:partx -d --nr 1:2 /dev/sdb 10、fsck.FS_TYPE工具 file system check,文件系统检测工具。或者使用fsck -t FS_TYPE。注:文件系统的检测需要将文件系统卸载后再进行检测修复。 选项: -p # 自动修复错误 -r # 交互式修复错误 11、e2fsck工具 ext系列文件系统专用修复工具 选项: -y # 自动修复 -f # 强制修复 12、findfs工具 通过LABEL和UUID查找文件系统。 findfs LABEL=label findfs UUID=uuid 13、findmnt mountport|devices 选项: -s # 查看/etc/fstab中是否有记录 findmnt /dev/sdb2 可以判断目录或设备是否被挂载或挂载 ================================================================================================================================================ 三、文件系统挂载 挂载后的分区会在/proc/mounts文件中显示,内核追踪到的说有挂载设备 。 1、mount命令 基本格式:mount [-fnrsvw] [-t vfstype] [-o options] device dir 选项: -l # 列出所有被挂载的文件系统信息.使用-t选项可以列出指定类型的文件系统 -a # 读取/etc/fstab中的配置,并将所有文件系统挂载,且定义的文件系统必须指明auto挂载选项 只针对新增加的文件系统或者还未挂载的文件系统生效89 -t FS_TYPE # 指明要挂载文件系统的类型,可以省略,可自动识别挂载 -r # readonly,只读挂载 -w # 读写挂载,同 -o rw -n # 挂载后不更新/etc/mtab文件,每一个文件挂载后,都会在此文件中添加条目 -f # 强制卸载文件系统 -L # 以卷标方式识别设备挂载 -U # 以UUID识别设备的方式挂载 -B|--bind # 挂载目录到另外一个目录。(绑定一个目录到另外一个目录) -o OPTION.. # 指定一个或多个挂载选项,多个选项用逗号隔开 OPTION: defaults # rw, suid, dev, exec, auto, nouser,async atime # 每次存取目录和文件时更新 inode 存取时间。这是默认选项 noatime # 存取时不是每次都更新时间戳 relatime # 条件式的访问时间更新属性 diratime # 更新目录的访问时间戳 nodiratime # 不更新目录的访问时间戳 auto/noauto # 可以在使用 -a 选项时被挂载 defaults # 包含以下选项:rw, suid, dev, exec,auto, nouser,async async # 异步I/O模式存储 sync # 以同步方式进行I/O操作,突然断电不会掉资料,但加重磁盘负担 exec # 允许执行二进制文件 noexec # 不允许执行被加载的文件系统中的任何二进制文件运行 noauto # 只能被显式地挂载,不能使用-a挂载 dev # 解析文件系统中的字符设备或块设备 nodev # 不解析文件系统中的字符设备或块设备 nouser # 禁止普通用户挂载文件系统(默认) remount # 试图重新挂载一个已经挂载的文件系统。通常用来改变挂载标记,如由只读挂载改成可读写的 ro # 以只读方式挂载 rw # 以读写方式挂载 suid/nosuid # 允许set-user-identifier 或set-group-identifierz位起作用 dirsync # 所有对文件系统内目录的更新应当是同步完成的,影响下列系统调用:creat,link, unlink, symlink, mkdir, rmdir, mknod 以及 rename user # 允许普通的用户挂载文件系统,挂载者的用户名被写入mtab,从而使他可以再次卸载文件系统。这个选项暗含 了选项noexec,nosuid, 以及 nodev. noexec # 不允许执行程序 users # 允许每个用户挂载卸载文件系统 loop # 挂载回环设备 经常挂载iso文件用到。在Linux中最多能挂载8个回环设备。 可以使用mknod -o loop b 7 8进行创建回环设备 可以使用losetup -a查看回环设备的关联情况 username # username=user 访问设备的用户名 password # password=pass 访问设备的密码 acl # 启用访问控制列表功能 grpquota|noquota|quota|usrquota # 磁盘配额 device: 1、设备文件,例如 /dev/sda1 2、卷标,例如 -L LABEL 3、UUID,例如 -U UUID 4、伪文件系统 /proc /sys dir: 注: 存在的目录; 目录是一个空目录; 一个目录不能重复挂载多个设备; 一个设备可以挂载到多个目录; 2、umount命令 选项: -f # 强制卸载文件系统 3、fuser命令 fuser -v /works/sdb1 # 显示正在访问该文件系统的进程 fuser -km /works/sdb1 # 杀死访问该文件系统的所有进程 5、free命令 默认以k为单位显示。share字段属于真正被使用内存。 选项: -[k|m|g|h] # 以不同的单位显示 -c N # 指定s秒,显示N秒内的结果 -s N # N秒刷新一次内存变化情况 6、df命令 磁盘空间信息显示 选项: -B [K, M, G, T, P] # 指定显示容量单位 -i # 显示inode的使用情况 -T # 显示文件系统 -h # 易读的单位显示 -H # 以1000为单位显示 -p # POSIX格式打印 7、du命令 只统计目录的大小,默认单位的k 格式:du [OPTION]... [FILE]... 选项: -h # 易读的单位 -s # 只显示指定的目录的大小 例: 显示根目录下所有目录的大小:du -sh /* 8、文件系统挂载配置文件 /etc/fstab 每一行6个字段: 设备或者文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序 1、LABEL="" 或者 UUID="" 或者 proc、sysfs 2、要挂载到的目录路径 3、文件系统类型 4、挂载选项 5、转储频率,指多长时间备份一次。值可以是0(不)|1(每天)|2(每隔一天) 6、自检次序,0(不自检)|1(首先自检)|2.... 建议为0 注: 挂载目录配置文件格式:/etc /mnt none bind 0 0 9、dd工具 格式:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST 选项: of= # 指定输出路径,默认是标准输出 bs= # block size, 复制单元大小,字节为单位 count= # 复制多少个bs ibs= # (指定读时按多少字节读)输入按指定的大小的块,单位为字节,默认是512 obs= # (指定写时按多少字节读)输出按指定的大小的块,单位为字节,默认是512 skip=blocks # 从开头忽略blocks个ibs 大小的块 从输入文件开头跳过 blocks 个块后再开始复制 seek=blocks # 从开头忽略blocks个obs 大小的块 从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效) conv=conversion[,conversion...] 用指定的参数转换文件  ascii 换转换 EBCDIC为ASCII  ebcdic 换转换ASCII为EBCDIC  lcase 把大写字符转换为小写字符  ucase 把小写字符转换为大写字符  nocreat 不创建输出文件  noerror 出错时不停止  notrunc 不截断输出文件  sync 把每个输入块填充到ibs 个字节,不足部分用空(NUL)字节符补齐 示例: # 备份主引导记录 dd if=/dev/sda of=/path/to/MBR.img bs=512 count=1 # 要创建仅含主引导记录引导代码的镜像(不包括分区表和开机所需的魔法字节): dd if=/dev/sda of=MBR_boot.img bs=446 count=1 # 原地修复数据,notrunc表示输出的文件内容再输入到已经存在的file中 dd if=/dpath/to/file of=path/to/file bs=512 count=1 conv=notrunc # 生成随机文件 dd if=/dev/urandom of=myrandom bs=100 count=1 # 将文件转换为大写 dd if=/etc/passwd of=passwd.bak conv=ucase # 有一个大于2K的二进制文件fileA 。现在想从第64 个字节位置开始读取,需要读取的大小是128Byts 。 又有fileB, 想把上面读取到的128Bytes 写到第32 个字节开始的位置,替换128Bytes : dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc # 修复硬盘MBR dd if=/dev/sda of=/dev/sda # 得到系统最恰当的块大小 dd if=/dev/zero bs=[1024|2048|4096] count=1000000 of=/root/1Gb.file # 拷贝光盘数据 dd if=/dev/cdrom of=/root/cd.iso # 拷贝内存数据 dd if=/dev/mem of=/root/mem.bin bs=1024 10、弹出光盘 egect 弹出光驱 egect -t 关闭光驱 11、制作镜像 1、cp 命令直接复制光盘设备文件 2、mkisofs -r -o /path/to/dir 12、挂载U盘 lsusb # 查看sub设备信息 ================================================================================================================================================ 四、RAID 1988年加利福尼亚大学伯克利分校 1、什么是RAID 独立磁盘冗余阵列(RAID, Redundant Array of Independent Disks)。将硬盘组合起来,成为一个磁盘 阵列,使用 [相对较小的代价],通过并行读写的方式读写从而达到 [增加性能] 的目的、[增强数据安全性] 的目的。 RAID特性: 提高I/O能力 提高耐用性 通常RAID的实现需要硬件的支持,硬件有外接式和内接式的,外接式的 [磁盘阵列卡] ,内接式是集成在主板的RAID控制器, 安装操作系统前在BIOS里配置。 2、RAID类型 1、标准RAID(RAID0|RAID1|) RAID-0:条带卷 strip 将两个以上的硬盘组合成一个容量较大的硬盘,在存储数据时,将数据按块分散,然后并行 存储到磁盘,比如要将100M数据存储到RAID0,则先将100M分成50M的两份,然后每个磁盘存 储50M,这样并行存储,性能自然就提高了。RAID0组合可以达到提高存储性能目的,但RAID0组合对 数据没有任何的冗余能力,甚至会增大数据丢失的概率,一块磁盘的数据丢失,则所有的数据 丢失。 特性: 读写性能提升;可用空间取决于容量最小的磁盘;无冗余能力;磁盘数量最少为2 RAID-1:镜像卷 mirror 将两组N个硬盘组合,其中两组互为备份,当有数据存储时,会将数据在这两个硬盘中分别存储一份, 这样当一个硬盘损坏时,利用另外一个硬盘可以完全的恢复数、据,以数据安全的目的。但RAID1的 容量是硬盘总容量的一半,且写性能下降。 特性: 读性能提升,写性能下降;容量减半;冗余能强;磁盘数量最少为2 RAID-4:将至少三块硬盘组成起来,在存储数据时,将数据切块并行的存入其中两块磁盘,第三块磁盘 存放前两块磁盘数据的校验码,当前两块磁盘的任何一块数据损坏,则可以利用存放校验码的 磁盘恢复损坏磁盘的数据。但其有缺陷,单块磁盘作为校验码,存取频繁,容易损坏,而且成 为性能瓶颈。 RAID-5:当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损 坏的数据。RAID在RAID4的机制上,采用循坏校验的机制,达到访问平衡的结果。即将校验码 分别存放到组成RAID的各个磁盘上。RAID 5具有和RAID0相近似的数据读取速度,只是因为多 了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写缓存” 可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要 比RAID 1高,存储成本相对较便宜。 注: 当有一块硬盘损坏,也没有空闲盘顶替的时候,当系统读取数据时,都要根据校验码计算 出数据,会导致系统性能下降。 (降级模式) 特性:读写性能提升;可用空间n-1;有冗余能力,允许坏一块硬盘;最少磁盘数量为3 RAID-6:最少使用4块硬盘,在RAID5的基础上,将校验码存放在两块硬盘上。冗余能力更强。 允许同时损坏2块硬盘。 RAID-10:先将磁盘组成RAID-1的至少2组的阵列,然后将RAID-1的阵列组组合和RAID-0。(底层组成RAID-1 上层再组合成RAID-0)。冗余能力大大增强。 特性:读写性能提升;有冗余能力;磁盘最少数量为4;冗余能力更强; RAID-50:在RAID5的基础上,作RAID0阵列 RAID-01:先将磁盘组成RAID-0的至少2组的阵列。然后将RAID-0组成和RAID-1。使用场景少。 JBOD:Just a Bunch DIsks 将多块磁盘的空间合并成一个大存储空间。 3、RAID的实现方式 1、通过磁盘阵列卡提供适配能力 2、主板集成RAID控制器 3、软件方式实现RAID 4、常用的RAID组成方式 RAID-0、RAID-1、RAID-5、RAID-10、RAID-50、JBOD 5、软RAID实现 利用内核的md(multi devices)模块功能。利用用户空间的管理工具进而利用内核的功能,实现软件的RAID。 6、mdadm工具 格式: mdadm [mode] [option] mode: -C 创建 -A 装配 -F 监控 -f|-r|-a 管理 -D /dev/md0 查看raid的状态信息 raiddevice: /dev/mdN options: -C模式: -n N # 使用N个块设备创建RAID -l N # 指明创建的RAID级别 -a {yes|no} # 是否自动创建RAID设备的设备的文件/dev/mdN -c CHUNK_SIZE # 指明块(chunk)大小 -x N # 指明空闲盘的个数 component-devices: 可以是任意的块设备,比如不同的分区或者不同的磁盘。 7、示例 # 创建RAID mdadm -C /dev/md0 -a yes -l5 -n3 /dev/sdb[1-3] -x1 /dev/sdb5 # 查看是否识别RAID设备 cat /proc/mdstat # 格式化RAID mkfs -t ext4 /dev/md0 # 挂载 mount /dev/md0 /works/md0 # 标记磁盘损坏 mdadm /dev/md0 -f /dev/sdb5 # 移除损坏的磁盘 mdadm /dev/md0 -r /dev/sdb5 # 重新添加磁盘到RAID阵列 mdadm /dev/md0 -a /dev/sdb5 # raid配置文件 mdadm –D –s >> /etc/mdadm.conf 设置配置文件mdadm.conf,加入如下指令(向系统注册UUID识别码) ARRAY /dev/md0 UUID=2256da5f:4870775e:cf2fe320:4dfabbc6 # 停掉TAID mdadm -S /dev/mdN # 激活RAID (需要配置文件mdadm.conf存在) mdadm –A –s /dev/md0 # 删除RAID信息 mdadm ----zero-superblock /dev/sdb1 # 移除raid mdadm --remove /dev/md0 # 增加raid新成员sda5 mdadm -G /dev/md0 -n N -a /dev/sda5 # 创建raid10 mdadm -C /dev/md10 -l 10 -a yes -n 4 /dev/sdb{1,2,3,4} 8、关闭软raid问题 dd if=/dev/zero of=/dev/md0 bs=1M count=50 dd if=/dev/zero of=/dev/sdb1 bs=1M count=50 dd if=/dev/zero of=/dev/sdb2 bs=1M count=50 dd if=/dev/zero of=/dev/sdb3 bs=1M count=50 3、参考资料 维基百科:https://zh.wikipedia.org/wiki/RAID ================================================================================================================================================ 五、LVM 1、LVM(Logical Volume Manager),逻辑卷管理器。LVM 是将是将几个实体的partitions 分区 (或磁盘 disk) 通过软件组合成为一块看起来是独立的大磁盘。在这个大磁盘之上可以任意的创建分区, 格式化使用,LVM可以任意的伸缩逻辑卷的大小。 2、实现原理 LVM利用Linux内核device-mapper(内核dm模块)来实现存储的虚拟化,将物理设备空间抽象虚拟化到更高的级别, 用相对较小的物理存储设备组成一个大容量的设备。 3、相关概念 1、物理卷(Physical volume),简称PV 物理的磁盘或者物理磁盘分区 2、卷组(Volume group),简称VG 将几个较小的磁盘或磁盘分区组合起来称为卷组 3、逻辑卷(Logical Volume),简称LV 将物理卷加入卷组之后,就可以创建任意大小的逻辑卷了,创建好的逻辑卷可以格式化成任意文件系统并将它挂载使用 4、物理区段(Phsical Extent),简称PE 逻辑卷加入卷组之后,卷组将存储空间划分成固定的块向上提供存储空间,LVS按相同的大小的块为单位分配存储空间, 通常情况下,块的大小默认是4MB。物理区段的大小在VG的层次决定划分 5、逻辑区段(Logical Extent),简称LE 在逻辑卷上块存放数据的叫逻辑区段 4、LVM创建步骤 1、初始化磁盘或者磁盘分区设置正确的分区类型,以被LVM识别为物理卷设置分区格式为'Linux LVM',对应的十六进 制码为8e(MBR)或8e00(GPT)。 2、创建卷组。由多个磁盘或磁盘分区组成 3、创建逻辑卷。格式化挂载使用 5、安装lvm 最小化安装的CentOS7没有lvm工具,需要手动安装yum install lvm2 6、管理工具 1、物理卷管理命令 # 属性管理 1、pvchange # 更改物理卷属性 2、pvck # 检测物理卷 格式:pvck /dev/device # 创建|删除|移除|扩展|缩小 3、pvcreate # 创建物理卷 格式: pvcreate [option] device 选项: -y # 自动回答为yes -f # 强制创建,还可以使用-ff -u # 指定uuid 5、pvmove # 把要移除的物理卷上的数据移动要其他物理卷上 pvmove /dev/sdaN 6、pvremove # 移除物理卷。注:在移除PV前,会将数据移动到其他PV设备上 格式:pvremove [option] device 7、pvresize # 调整LVM2使用的磁盘或分区大小 # 显示信息 4、pvdisplay # 显示详细信息 8、pvs # 简要信息显示 9、pvscan # 显示信息 2、卷组管理命令 2、vgremove # 删除卷组 5、vgcreate # 创建卷组 格式: vgcreate [-s|--physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE] VolumeGroupName PhysicalDevicePath 选项: -s|--physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE] # 指定PE大小,默认是4M 6、vgck # 检查卷组 7、vgchange # 改变卷组属性,例如可以使用vgchage -s修改卷组PE大小 8、vgrename # 修改卷组名称 格式: vgrename vg_name new_vgname 9、vgextend # 扩展卷组 格式: vgextend VG_NAME device 10、vgreduce # 缩减卷组,将物理卷从VG中移除。注:缩小VG之前,要先将PV pvmove ,将数据移动到其他PV上 格式:vgreduce [-A|--autobackup {y|n}] [-f|--force] [-t|--test] [-v|--ver‐bose] VolumeGroupName PhysicalDevicePath 11、vgsplit # 信息显示 1、vgdisplay 4、vgscan 3、vgs 3、逻辑卷管理命令 2、lvcreate 格式: -L N -n LV_NAME VG_NAME 选项: -L|--size LogicalVolumeSize[b|B|s|S|k|K|m|M|g|G|t|T|p|P|e|E] # 指定大小 -l # 以PE个数进行划分大小 -l 50%vg # 以百分比进行划分逻辑卷大小 -n|--name LogicalVolume{Name|Path} # 指定逻辑卷名称 6、lvremove # 删除逻辑卷 格式:lvremove /de/VG-LV_NAME 7、lvrename # 修改逻辑卷名称 格式: vgrename /dev/lv_name new_lvname 8、lvextend # 扩展逻辑卷,扩展后需要扩展文件系统 格式: lvextend -L [+]#[mMgGtT] /dev/LV_NAME 选项: -l [+]PE # 以PE个数指定大小。+表示在原来的基础上加上N个PE,直接指定增加后的PE个数 -r # 扩展逻辑卷后自动扩展文件系统 9、lvreduce # 必须离线缩减,不能在线缩减。xfs文件系统不能缩减 lvchange lvmchang lvmdump lvmpolld lvmsar lvresize lvmetad lvmsadc 3、lvm # 显示信息 1、lvs 5、lvscan 4、lvdisplay 4、扩展文件系统(扩展逻辑卷但文件系统没有扩展,所以需要将文件系统扩展至逻辑卷的所有容量) # 只适用ext系列的文件系统 resize2fs /dev/device filefstem_size # 只适用ext系列的文件系统 # XFS文件系统扩展 xfs_growfs /path/to/mount_point # 逻辑卷名称 创建逻辑卷后,会生成设备文件/dev/dm-N,并生成/dev/mapper/VG-LV_NAME和/dev/VG_NAME/..软链接文件。 5、缩减逻辑卷(先缩减文件系统,然后缩减逻辑卷) 1、将挂载的逻辑卷卸载 2、使用resize2fs缩减文件系统。resize2fs /dev/LV_NAME N[mMgGtT] 缩减后的空间要一定能容纳现有的文件 3、e2fsck工具强制修复文件系统 fsck -f /dev/vg_name/lv_name 4、开始缩减逻辑卷 lvreduce -L 3G /dev/LV_NAME 5、重新挂载逻辑卷 6、移除卷组中的物理卷 1、确保要移除的物理卷中没有数据 2、如果要移除的物理卷中有数据,则要使用pvmove将数据移动到其他物理卷上 3、然后使用vgreduce将物理卷从vg中移除 4、最后使用pvrmove将去掉物理卷的标签 7、LVM快照 snapshot 1、理解 由于快照区与原本的 LV 共享很多 PE 区块,因此快照区与被快照的 LV 必须要在同一个 VG 上头。快照内是 磁盘的元数据,不是真正的物理数据。快照区内有保留的区域,当磁盘内的数据发生改变时,系统会在数据改 变前自动将磁盘数据改变区的数据移动到快照保留区。 2、创建快照卷 快照卷和逻辑卷必须在同一个卷组内。 -s|--snapshot OriginalLogicalVolume # 指明原逻辑卷的名称 -n|--name SnapshotLogicalVolumeName # 指定快照逻辑卷的名称 -L|--size LogicalVolumeSize # 指明快照逻辑卷大小 -p|--permission {r|rw} # 指明读写权限 # 创建快照卷 lvcreate -[L|l] N[mMgGtT] -p r -s originalLogicalVolume -n SnapshotLogicalVolumeName # 还原快照(此快照会删除原来的逻辑卷) lvconvert --merge /dev/VG_NAME/lv_snapshot_name 8、逻辑卷的迁移 1、卸载逻辑卷 2、确保逻辑卷或者卷组的名称不冲突 使用lvrename或者vgrename修改名称 3、标记vg为不可用(将卷组改为非活动状态) vgchange -an vg_name 4、导出vg vgexport vg_name 5、拆除硬盘插入新主机 6、pvscan工具扫描pv 7、vgimport new_vgname # 导入vg 8、vgchange -ay new_vgname # 启用为活动状态 ================================================================================================================================================ 六、磁盘配额 Quoya 1、最小化安装的CentOS7没有安装quota包,可以使用rpm从光盘安装或者使用yum安装quota包。 2、使用场景 1、给不同目录设置不同的磁盘大小 2、限制某一群组或用户使用的磁盘大小 3、理解 1、允许管理员一文件系统为单位对使用容量进行限制 2、Quota实际是管理文件系统。即对文件系统的inode和block进行限制 3、只有root用户才可以配置磁盘配额 4、软件限制就是一个值,这个值就是用户超过配额时将会收到邮件警告的次数。硬件限制用户不能超过的次数 5、文件系统根据属主、属组判断是否超出限额 4、磁盘配额功能启用 修改/etc/fstab文件系统挂在选项,针对不同的文件系统,挂载选项参数有所不同。 参数 使用文件系统类型 功能 usrquota 所有类型 启用用户配额 grpquota 所有类型 支持组配额 uquota xfs 相当于usrquota gquota xfs 相当于grpquota prjquota xfs 启用项目配额 pquota xfs 相当于prjquota uqnoenforce xfs 启用用户配额审计,但是不能启用强制措施 gqnoenforce xfs 启用组配额审计,但是不能启用强制措施 pqnoenforce xfs 启用项目配额审计,但是不能启用强制措施 5、quotacheck 工具 检查所有文件系统上的配额。 格式: quotacheck option FILESYS_TYPE 选项: -a|--all # 检查所有安装在 /etc/mtab(除了 NFS 文件系统)的文件系统 -c|--create-files # 忽略当前的配额文件。运行新的扫描,将结果写到磁盘。生成aquota.user和auto.group文件 -u|--user # 检查用户配额(默认的) -g|--group # 检查组配额 -v|--verboseVerbose # 输出 注意:quotacheck命令不会检查xfs的文件系统,因为xfs的文件系统配额结构包含在元数据和日志中。 6、quotaon/quotaoff 工具 关闭或开启文件系统的磁盘配额 格式: quotaon/quotaoff option FILESYS_TYPE 选项: -a # 开启所有文件系统的配额 -u # 开启针对用户的磁盘配额 -g # 开启针对用户组的磁盘配额 -v # 显示信息 -p # 只显示配额的开启或者关闭 7、对用户/组设置配额 edquota USERNAME # 针对某一用户设置配置 edquota -p USERNAME_1 USERNAME_2 # 将用户1的配额设置设置到用户2 在非交互式模式下可以使用setquota命令进行设置: setquota USERNAME quota limit quota limit /filesystem setquota [ -rm ] [ -u | -g ] [ -F quotaformat ] name block-softlimit block-hardlimit inode-softlimit inode-hardlimit -a | filesystem... 示例:将用户quota1的创建的文件大小限制为10M,文件个数为50 1、编辑配额 edquota quota1 1 Disk quotas for user quota1 (uid 1000): 2 Filesystem blocks soft hard inodes soft hard 3 /dev/sdb1 0 10240 11264 0 50 55 4 /dev/sdb2 0 10240 11264 0 50 55 2、切换用户,创建文件测试 edquota -t # 选项设置宽限期,默认是七天 quota -v quota1 # 显示某个用户的配额使用情况 注:SElinux会影响quota的使用 8、配额报告 repquota工具:生成文件系统的配额报告。 9、针对目录进行磁盘配额 XFS 配额系统还支持项目配额 它是组配额的替换。您不能在 XFS 文件系统上同时使用组和项目配额。项目配额要通过在 /etc/fstab 中添加 prjquota(或者pquota)启用。项目配额使用数字 id 的概念和更具描述性的项目名称文件 /etc/projects 用 于映射数字项目识别符到目录树,而文件 /etc/projid 映射数字项目识 别符到项目名称。 示例: /quotatest/xfs/proj-dir1 下设置一个 15MB 项目硬件限制的项目树 示例: [root@echidna ~]# mkdir -m ag+w /quotatest/xfs/proj-dir{1,2} [root@echidna ~]# chown development:development /quotatest/xfs/proj-dir* [root@echidna ~]# echo "50:/quotatest/xfs/proj-dir1" >> /etc/projects [root@echidna ~]# echo "dev-projects:50" >> /etc/projid [root@echidna ~]# xfs_quota -x xfs_quota> path Filesystem Pathname 000 /quotatest/xfs /dev/sda8 (uquota, pquota) [001] /quotatest/xfs/proj-dir1 /dev/sda8 (project 50, dev-projects) xfs_quota> project -s dev-projects Setting up project dev-projects (path /quotatest/xfs/proj-dir1)... Processed 1 (/etc/projects and cmdline) paths for project dev-projects with recursion depth infinite (-1). xfs_quota> limit -p bhard=15m dev-projects xfs_quota> q ================================================================================================================================================