赞
踩
[root@localhost ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xee9f9ba4. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (263-2610, default 263): Using default value 263 Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610): +2G Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (525-2610, default 525): Using default value 525 Last cylinder, +cylinders or +size{K,M,G} (525-2610, default 2610): +2G Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@localhost ~]# ls /dev/sdb* /dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 [root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created [root@localhost ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2 /dev/sdb3 Volume group "vg01" successfully created [root@localhost ~]# lvcreate -n lv01 -L 2G vg01 Logical volume "lv01" created [root@localhost ~]# mkfs.ext4 /dev/vg01/lv01 [root@localhost ~]# mkdir /test [root@localhost ~]# mount /dev/vg01/lv01 /test [root@localhost ~]# ls /test/ lost+found [root@localhost test]# dd if=/dev/zero of=testdb bs=100M count=1 记录了1+0 的读入 记录了1+0 的写出 104857600字节(105 MB)已复制,0.836092 秒,125 MB/秒 [root@localhost test]# ll 总用量 102416 drwx------. 2 root root 16384 3月 30 17:16 lost+found -rw-r--r--. 1 root root 104857600 3月 30 17:19 testdb [root@localhost test]# lvcreate -s -n lv01bak -L 200M /dev/vg01/lv01 Logical volume "lv01bak" created [root@localhost test]# tar -zcf /root/backlv.tar.gz /dev/vg01/lv01bak tar: 从成员名中删除开头的“/” [root@localhost test]# ls /root/ backlv.tar.gz 把这个包拖拽出来 待会测试一下去其他环境还好不好用 去其他环境下不可用,因为逻辑卷快照也算是一个逻辑卷,恢复快照的时候必须有逻辑卷快照才行,根据逻辑卷快照恢复逻辑卷,如果到了其他的环境,逻辑卷快照没有了,自然也就不能恢复了
定义:
RAID 0又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。
工作原理:
系统向三个磁盘组成的逻辑硬盘(RAID0 磁盘组)发出的I/O数据请求被转化为3项操作,其中的每一项操作都对应于一块物理硬盘。通过建立RAID 0,原先顺序的数据请求被分散到所有的三块硬盘中同时执行。从理论上讲,三块硬盘的并行操作使同一时间内磁盘读写速度提升了3倍。 但由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值,但是,大量数据并行传输与串行传输比较,提速效果显著显然毋庸置疑。
优缺点:
读写性能是所有RAID级别中最高的。
RAID 0的缺点是不提供数据冗余,因此一旦用户数据损坏,损坏的数据将无法得到恢复。RAID0运行时只要其中任一块硬盘出现问题就会导致整个数据的故障。一般不建议企业用户单独使用。
总结:
磁盘空间使用率:100%,故成本最低。
读性能:N*单块磁盘的读性能
写性能:N*单块磁盘的写性能
冗余:无,任何一块磁盘损坏都将导致数据不可用。
定义:
RAID 1通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。
工作原理:
RAID1是将一个两块硬盘所构成RAID磁盘阵列,其容量仅等于一块硬盘的容量,因为另一块只是当作数据“镜像”。RAID1磁盘阵列显然是最可靠的一种阵列,因为它总是保持一份完整的数据备份。它的性能自然没有RAID0磁盘阵列那样好,但其数据读取确实较单一硬盘来的快,因为数据会从两块硬盘中较快的一块中读出。RAID1磁盘阵列的写入速度通常较慢,因为数据得分别写入两块硬盘中并做比较。RAID1磁盘阵列一般支持“热交换”,就是说阵列中硬盘的移除或替换可以在系统运行时进行,无须中断退出系统。RAID1磁盘阵列是十分安全的,不过也是较贵一种RAID磁盘阵列解决方案,因为两块硬盘仅能提供一块硬盘的容量。RAID1磁盘阵列主要用在数据安全性很高,而且要求能够快速恢复被破坏的数据的场合。
在这里,需要注意的是,读只能在一块磁盘上进行,并不会进行并行读取,性能取决于硬盘中较快的一块。写的话通常比单块磁盘要慢,虽然是并行写,即对两块磁盘的写入是同时进行的,但因为要比较两块硬盘中的数据,所以性能比单块磁盘慢。
优缺点:
总结:
磁盘空间使用率:50%,故成本最高。
读性能:只能在一个磁盘上读取,取决于磁盘中较快的那块盘
写性能:两块磁盘都要写入,虽然是并行写入,但因为要比对,故性能单块磁盘慢。
冗余:只要系统中任何一对镜像盘中有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行。
图中Aβ Bβ Cβ 为奇偶校验信息
定义:
RAID 5是RAID 0和RAID 1的折中方案。RAID 5具有和RAID0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID5的磁盘空间利用率要比RAID 1高,存储成本相对较低,是目前运用较多的一种解决方案。
工作原理:
RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此当RAID5的一个磁盘发生损坏后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID还会自动利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5的高可靠性。
做raid 5阵列所有磁盘容量必须一样大,当容量不同时,会以最小的容量为准。 最好硬盘转速一样,否则会影响性能,而且可用空间=磁盘数n-1,Raid 5 没有独立的奇偶校验盘,所有校验信息分散放在所有磁盘上, 只占用一个磁盘的容量。
总结:
磁盘空间利用率:(N-1)/N,即只浪费一块磁盘用于奇偶校验。
读性能:(n-1)*单块磁盘的读性能,接近RAID0的读性能。
写性能:比单块磁盘的写性能要差(这点不是很明白,不是可以并行写入么?)
冗余:只允许一块磁盘损坏。
定义:
RAID10也被称为镜象阵列条带。象RAID0一样,数据跨磁盘抽取;象RAID1一样,每个磁盘都有一个镜象磁盘, 所以RAID 10的另一种会说法是 RAID 0+1。RAID10提供100%的数据冗余,支持更大的卷尺寸,但价格也相对较高。对大多数只要求具有冗余度而不必考虑价格的应用来说,RAID10提供最好的性能。使用RAID10,可以获得更好的可靠性,因为即使两个物理驱动器发生故障(每个阵列中一个),数据仍然可以得到保护。RAID10需要4 + 2*N 个磁盘驱动器(N >=0), 而且只能使用其中一半(或更小, 如果磁盘大小不一)的磁盘用量, 例如 4 个 250G 的硬盘使用RAID10 阵列, 实际容量是 500G。
实现原理:
总结:
磁盘空间利用率:50%。
读性能:N/2*单块硬盘的读性能
写性能:N/2*单块硬盘的写性能
冗余:只要一对镜像盘中有一块磁盘可以使用就没问题。
创建raid使用mdadm命令,关于此命令,参数如下:
1)进入各个模式的选项
①创建模式:-C
②管理模式:-add 或者 –del
③监控模式:-F
④增长模式:-G
⑤装配模式:-A
2)创建模式下的专用选项
①指定RAID级别:-l
②指定设备个数:-n #
③是否自动创建设备文件:-a {yes|no}
④指定创建RAID设备的数据块(CHUNK)大小(默认64K): -c #unit
⑤指定空闲盘个数:-x #
fdisk /dev/sdb 创建数个分区,供下列实验用
Device Boot Start End Blocks Id System
/dev/sdb1 1 132 1060258+ 83 Linux
/dev/sdb2 133 264 1060290 83 Linux
/dev/sdb3 265 396 1060290 83 Linux
/dev/sdb4 397 2610 17783955 5 Extended
/dev/sdb5 397 528 1060258+ 83 Linux
/dev/sdb6 529 660 1060258+ 83 Linux
/dev/sdb7 661 792 1060258+ 83 Linux
/dev/sdb8 793 924 1060258+ 83 Linux
/dev/sdb9 925 1056 1060258+ 83 Linux
/dev/sdb10 1057 1188 1060258+ 83 Linux
/dev/sdb11 1189 1320 1060258+ 83 Linux
查看分区是否已建立
# cat /proc/partitions
[root@localhost ~]# mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sdb1 /dev/sdb2 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. 查看当前系统上所有处于启动状态的RIAD设备的状态,看raid设备是否创建成功。 [root@localhost ~]# cat /proc/mdstat Personalities : [raid0] md0 : active raid0 sdb2[1] sdb1[0] 2119680 blocks super 1.2 512k chunks unused devices: <none> 格式化并挂载使用 66 mkdir /mn 67 mount /dev/md0 /mn
# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb3 /dev/sdb5 -x 1 /dev/sdb6 # cat /proc/mdstat Personalities : [raid0] [raid1] md1 : active raid1 sdb6[2](S) sdb5[1] sdb3[0] 1059200 blocks super 1.2 [2/2] [UU] md0 : active raid0 sdb2[1] sdb1[0] 2119680 blocks super 1.2 512k chunks unused devices: <none> 之后可以格式化、然后挂载使用 查看详细信息: [root@localhost ~]# mdadm -D /dev/md1 /dev/md1: Version : 1.2 Creation Time : Sat Mar 30 21:46:56 2019 Raid Level : raid1 Array Size : 1059200 (1034.55 MiB 1084.62 MB) Used Dev Size : 1059200 (1034.55 MiB 1084.62 MB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Sat Mar 30 21:47:02 2019 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Name : localhost.localdomain:1 (local to host localhost.localdomain) UUID : 5f40231d:f9d89d9e:d3b08a1a:ff1c159a Events : 17 Number Major Minor RaidDevice State 0 8 19 0 active sync /dev/sdb3 1 8 21 1 active sync /dev/sdb5 2 8 22 - spare /dev/sdb6 模拟磁盘损坏: [root@localhost ~]# mdadm /dev/md1 -f /dev/sdb5 mdadm: set /dev/sdb5 faulty in /dev/md1 查看磁盘信息: 可以发现,sdb5损坏之后,sd6顶上去了 [root@localhost ~]# mdadm /dev/md1 -f /dev/sdb5 mdadm: set /dev/sdb5 faulty in /dev/md1 [root@localhost ~]# mdadm -D /dev/md1 /dev/md1: Version : 1.2 Creation Time : Sat Mar 30 21:46:56 2019 Raid Level : raid1 Array Size : 1059200 (1034.55 MiB 1084.62 MB) Used Dev Size : 1059200 (1034.55 MiB 1084.62 MB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Sat Mar 30 21:54:08 2019 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Name : localhost.localdomain:1 (local to host localhost.localdomain) UUID : 5f40231d:f9d89d9e:d3b08a1a:ff1c159a Events : 36 Number Major Minor RaidDevice State 0 8 19 0 active sync /dev/sdb3 2 8 22 1 active sync /dev/sdb6 1 8 21 - faulty /dev/sdb5 移除已损坏的磁盘: [root@localhost ~]# mdadm /dev/md1 -r /dev/sdb5 mdadm: hot removed /dev/sdb5 from /dev/md1 查看磁盘信息: mdadm -D /dev/md1 Number Major Minor RaidDevice State 0 8 19 0 active sync /dev/sdb3 2 8 22 1 active sync /dev/sdb6 提供空闲磁盘做备用: [root@localhost ~]# mdadm /dev/md1 -a /dev/sdb5 mdadm: added /dev/sdb5 查看磁盘信息: mdadm -D /dev/md1 Number Major Minor RaidDevice State 0 8 19 0 active sync /dev/sdb3 2 8 22 1 active sync /dev/sdb6 3 8 21 - spare /dev/sdb5 停止raid阵列 [root@localhost ~]# mdadm -S /dev/md1 mdadm: stopped /dev/md1 把阵列重新装配启动: [root@localhost ~]# mdadm -C /dev/md2 -l 1 -n 2 /dev/sdb7 /dev/sdb8 -x 1 /dev/sdb9 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? Continue creating array? (y/n) y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md2 started. [root@localhost ~]# mdadm -D --scan >> /etc/mdadm.conf [root@localhost ~]# mdadm -S /dev/md2 mdadm: stopped /dev/md2 [root@localhost ~]# mdadm -A /dev/md2 mdadm: /dev/md2 has been started with 2 drives and 1 spare. 尽量在每次创建RAID的时候更新一下/etc/mdadm.conf配置文件
创建raid5:
# mdadm -C /dev/md3 -l 5 -n 3 /dev/sdb7 /dev/sdb8 /dev/sdb9
# mdadm /dev/md3 -a /dev/sdb10
mdadm: added /dev/sdb10
格式化、挂载使用
LVM——Logical Volume Manager
LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性
(1)物理磁盘被格式化为PV,空间被划分为一个个的PE
(2)不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内
(3)LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘
(4)LV现在就直接可以格式化后挂载使用了
(5)LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
1. 查看: pes、pedisplay 查看pe的大小(pes==pescan) pvs、pvdisplay 查看物理卷 vgs、vgdisplay、 查看卷组 lvs、lvdisplay、 查看逻辑卷 fdisk -L 查看磁盘分区 2. 创建: pvcreate 设备路径 创建物理卷 vgcreate 名字 pv路径 创建卷组 lvcreate -n 名字 -L 大小 vg名 创建逻辑卷 格式化:mkfs.ext4 lv完整路径 格式化逻辑卷(mkfs.文件系统格式或-t 文件系统格式) 挂载:mount lv完整路径 挂载点 挂载使用(可以使用/etc/fstab或autofs) 3. 逻辑卷删除: 卸载:umount 删lv:lvremove lv完整路径 删vg:vgremove vg名 删PV:pvremove 设备完整路径 4、逻辑卷扩展: 扩展pv:相当于创建pv 扩展vg: vgextend vg名 新增pv路径 扩展lv: lvextend -L +扩展量 lv完整路径 刷新文件系统:resize2fs lv完整路径 注意:灵活运用,看实际情况,注意顺序 (支持在线操作) 5、逻辑卷的缩小: 1) 首先进行卸载 umount 检查文件系统:e2fsck -f lv完整路径 2) 减少文件系统:resize2fs lv完整路径 减少到的大小 3) 减少lv卷大小:lvreduce -L -减少量的大小 lv的完整路径 4) 挂载使用 减小需谨慎,文件系统的减小后大小一定要和lv卷最终大小相等
创建PV: [root@localhost ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created [root@localhost ~]# pvcreate /dev/sdc1 Physical volume "/dev/sdc1" successfully created 创建VG: [root@localhost ~]# vgcreate mail_store /dev/sdb1 /dev/sdc1 Volume group "mail_store" successfully created 创建LV: [root@localhost ~]# lvcreate -L 60G -n mail mail_store Logical volume "mail" created 制作文件系统: [root@localhost ~]# mkfs -t ext4 /dev/mail_store/mail 挂载使用: [root@localhost ~]# mount /dev/mail_store/mail /mount
LVM中snapshot通过“写时复制”(copy on write) 来实现,即当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data);创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,也就是对原始卷进行修改时,会将原始数据复制到快照预留区域。
逻辑卷快照只记录拍照逻辑卷的这个时刻发生变化的数据,以及从快照创建到释放这段时间里写入的数据,这是快照记录的两种数据。其他的不变的数据,快照只记录数据的存储信息,没有发生数据的物理拷贝。
注意:采取CoW实现方式时,snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效,所以非常重要的一点,一定要在snapshot的生命周期里,做完你需要做得事情。
元数据:任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元
数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。
关于逻辑卷的大小:
逻辑卷快照记录的数据有元数据、拍快照瞬间改变的数据、拍快照瞬间写入的数据,所以一般设置为最大I/O的两倍比较合适,如果最大I/O为100M,则快照大小设置为200M
问题: 脱离了原始的环境,逻辑卷快照还有没有意义?
答: 没有意义。去其他环境下不可用,因为逻辑卷快照也算是一个逻辑卷,恢复快照的时候必须有逻辑卷快照才行,根据逻辑卷快照恢复逻辑卷,如果到了其他的环境,逻辑卷快照没有了,自然也就不能恢复了
1.生成快照 -s:创建快照;-n:快照卷名;-L:大小 lvcreate -s -n snap-lv0 -L 500M /dev/vg0/lv0 2.还原逻辑卷 1) 原来的逻辑卷挂载使用,比如原来挂载在/mount目录 2) 在挂载目录创建文件,比如创建一个200M文件 dd if=/dev/zero of=/media/lv-zhi/temp.txt bs=100M count=1 3) 创建逻辑卷快照 lvcreate -s -L 120M -n zhi-back /dev/zhi/lv-zhi 4) 卸载原来的逻辑卷 umount /dev/zhi/lv-zhi 5) 还原逻辑卷 还原后原来的逻辑卷会恢复 lvconvert --merge /dev/zhi/zhi-back 6)挂载原来的逻辑卷,发现还是原来的文件,没有200M的文件
上边涉及到用dd命令创建测试文件,说明如下:
dd if=/dev/zero of=sun.txt bs=1M count=1
if代表输入文件。
of代表输出文件。
bs代表字节为单位的块大小。
count代表被复制的块。
其中/dev/zero是一个字符设备,会不断返回0值字节
逻辑卷恢复,具体操作如下:
80 fdisk /dev/sdb 81 pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3 83 vgcreate vg01 /dev/sdb1 /dev/sdb2 /dev/sdb3 84 lvcreate -n lv01 -L 2G vg01 85 mkfs.ext4 /dev/vg01/lv01 86 mkdir /test 87 mount /dev/vg01/lv01 /test/ 88 ls /test/ 89 dd if=/dev/zero of=/test/testdb bs=100M count=2 [root@localhost ~]# lvcreate -s -n lvbak -L 200M /dev/vg01/lv01 Logical volume "lvbak" created [root@localhost ~]# rm -rf /test/testdb [root@localhost ~]# umount /test/ [root@localhost ~]# lvconvert --merge /dev/vg01/lvbak Merging of volume lvbak started. lv01: Merged: 100.0% Merge of snapshot into logical volume lv01 has finished. Logical volume "lvbak" successfully removed [root@localhost ~]# mount /dev/vg01/lv01 /test/ [root@localhost ~]# ls /test/ lost+found testdb
做逻辑卷快照的时候,原来的逻辑卷里包含testdb文件,后来由于错误操作导致文件误删除,用逻辑卷快照进行恢复
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。