调整linux文件系统
安装系统时,我们面临的问题就是磁盘的划分,当然linux很早就明白这点,所以有了LVM卷,下面我们将开始讨论和了解LVM卷的相关内容。除此之外,我们后期会讨论下存储相关的信息,这里不再讨论。当然对于磁盘的其它相关知识这里不再赘述,优化相关的内容,我们后面再扯,这里仅仅去介绍如何为平台建设去调整磁盘。并且以LVM为主。
文件系统简述对比
文件系统 | 分区大小 | 单文件大小 | 最大目录数 | 其它特性 | 备注 |
Ext3 | 16TB | 2TB | 32000 | 高可用性、数据完整性比ext2好,支持日志。 | |
Ext4 | 1EB | 16TB | 无限 | 改善大文件(>=100M)操作效率 多块分配、延迟分配、快速fsck、日志校验、无日志模式、在线碎片整理 | 内核为2.6.28.2 |
Xfs | 8EB-1bit | 无限 | 无限 | 高性能处理大文件(>100M)、高性能,接近裸设备(吞吐达7GB/s对单文件读写约4GB/s)、高稳定性,大量线程操作磁盘时超越ext4. | |
FAT | 2G | 2G | 早期DOS/Windows使用,分区越大。磁盘浪费严重,性能一般般。 | ||
FAT32 | 127.53G/32G | 4G | 降低磁盘浪费,提成读写效率 | ||
NTFS | 简单卷2T 动态卷16T | 2T/16T | 无限 | 文件权限分配,磁盘配额,动态磁盘(NTFS5.0)、加密、动态压缩、日志功能 | Windows |
说明 NTFS在linux下是只读模式的,不能写入,这里不作为研究对象,而EXT2,ext3,fat,fat32这些文件格式在现有的linux系统中已经较少使用,其它的文件系统,在linux中更为少见。这里不再举例,ext4和xfs的性能相似,都具有日志和其它高级特性,在文件分区方面,两个都不会成为问题。唯一的不同就是对文件大小的读写效率上,ext4在小文件读写上有优势,xfs在大文件读写上有优势。还有就是在多线程操作时(如数据库,WEB视频服务器),xfs有优势。多说一句吧,RHEL7已经默认使用xfs替换掉了ext4,看来性能比ext4好些了呀。 |
查看系统文件系统类型
Shell># df –T
Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg_node1-lv_root ext4 35G 732M 33G 3% / /dev/sda1 ext4 477M 25M 427M 6% /boot |
LVM简述
想象一个情况,你在当初规划主机的时候将 /home 只给他 50G ,等到使用者众多之后导致这个 filesystem 不够大, 此时你能怎么作?多数的朋友都是这样:再加一颗新硬盘,然后重新分割、格式化,将 /home 的数据完整的复制过来, 然后将原本的 partition 卸载重新挂载新的 partition 。啊!好忙碌啊!若是第二次分割却给的容量太多!导致很多磁盘容量被浪费了! 你想要将这个 partition 缩小时,又该如何作?将上述的流程再搞一遍!唉~烦死了,尤其复制很花时间有没有更简单的方法呢? 有的!那就是我们这个小节要介绍的 LVM 这玩意儿!
LVM 的重点在于『可以弹性的调整 filesystem的容量!』而并非在于效能与数据保全上面。 需要文件的读写效能或者是数据的可靠性,请参考前面的 RAID 小节。 LVM 可以整合多个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁盘一样!而且,还可以在未来新增或移除其他的实体partition 到这个 LVM 管理的磁盘当中。 如此一来,整个磁盘空间的使用上,实在是相当的具有弹性啊!既然 LVM 这么好用,那就让我们来瞧瞧这玩意吧!
基本概念
LVM
LVM 的全名是 Logical VolumeManager,中文可以翻译作逻辑卷轴管理员。之所以称为『卷轴』可能是因为可以将 filesystem 像卷轴一样伸长或缩短之故吧!LVM 的作法是将几个实体的 partitions (或 disk) 透过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分割成为可使用分割槽 (LV), 最终就能够挂载使用了。但是为什么这样的系统可以进行 filesystem 的扩充或缩小呢?其实与一个称为 PE 的项目有关! 底下我们就得要针对这几个项目来好好聊聊!
Physical Volume, PV, 实体卷轴
我们实际的 partition 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过pvcreate 的命令将他转成 LVM 最底层的实体卷轴(PV) ,之后才能够将这些 PV 加以利用! 调整system ID 的方是就是透过 fdisk 啦!
Volume Group, VG, 卷轴群组
所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是LVM 组合起来的大磁盘!这么想就好了。 那么这个大磁盘最大可以到多少容量呢?这与底下要说明的 PE 有关喔~因为每个 VG 最多仅能包含 65534 个PE 而已。 如果使用 LVM 默认的参数,则一个 VG 最大可达 256GB 的容量啊!(参考底下的PE 说明)
Physical Extend, PE, 实体延伸区块
LVM 默认使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,因此默认的LVM VG 会有 4M*65534/(1024M/G)=256G。 这个 PE 很有趣喔!他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是藉由写入 PE 来处理的。 简单的说,这个 PE 就有点像文件系统里面的 block 大小啦。 这样说应该就比较好理解了吧?所以调整 PE 会影响到 VG 的最大容量喔!
Logical Volume, LV, 逻辑卷轴
最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分割槽的咚咚了!那么 LV 是否可以随意指定大小呢? 当然不可以!既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV 的装置档名通常指定为『 /dev/vgname/lvname 』的样式!
此外,我们刚刚有谈到 LVM 可弹性的变更 filesystem 的容量,那是如何办到的?其实他就是透过『交换 PE 』来进行数据转换, 将原本 LV 内的 PE 移转到其他装置中以降低 LV 容量,或将其他装置的 PE 加到此 LV 中以加大容量!VG、LV 与 PE 的关系有点像下图:
命令
fdisk
mkfs
lvcreate
lvdisplay
mount
命令:fdisk
功能:创建磁盘分区
用法
fdisk device 进入交互模式
a toggle a bootable flag b 编辑bsd磁盘标签 c toggle the dos compatibility flag d 删除分区 l 列出已知的分区类型 m 显示帮助 n 添加新分区 o 创建一个新的DOS分区表 p 显示分区表 q 不保存退出 s 创建一个新的sun分区表 t 修改分区系统id u change display/entry units v 验证分区表 w 保存并退出 x 扩展命令 (experts only) |
命令:mkfs
功能:格式化分区
扩展命令:mke2fs,mkfs.ext3,mkfs.ext4,mkfs.xfs等,这里不说明这些
用法:mkfs [-c|-l filename] [-b block-size][-f fragment-size]
[-ibytes-per-inode] [-I inode-size] [-J journal-options]
[-Gmeta group size] [-N number-of-inodes]
[-mreserved-blocks-percentage] [-o creator-os]
[-gblocks-per-group] [-L volume-label] [-M last-mounted-directory]
[-Ofeature[,...]] [-r fs-revision] [-E extended-option[,...]]
[-Tfs-type] [-U UUID] [-jnqvFKSV] device [blocks-count]
命令:mount
功能:挂载文件系统
用法:
其它的命令我们用到的时候再扯吧,先说这几个。
操作示例
创建普通卷
创建分区
Shell># 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 0x9c8e45f9. 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): Using default value 2610
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x9c8e45f9
Device Boot Start End Blocks Id System /dev/sdb1 1 2610 20964793+ 83 Linux
Command (m for help): w The partition table has been altered!
Calling ioctl() to re-read partition table. Syncing disks. |
创建文件系统
Shell># mkfs –t xfs /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=1310300 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=5241198, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 |
挂载到系统
Shell># mount /dev/sdb1 /mnt/sdb1
验证
Shell># mount –l
/dev/sdb1 on /mnt/sdb1 type xfs (rw) |
Shell># df –Th
Filesystem Type Size Used Avail Use% Mounted on /dev/sdb1 xfs 20G 33M 20G 1% /mnt/sdb1 |
到此我们普通卷的创建就ok了。剩下的内容我们过后再说。
创建LVM卷
创建分区(注意与普通卷的不同)
Shell>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 0xcdd8dc51. 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-65270, default 1): 1 Using default value 65270
Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p (验证配置)
Disk /dev/sdb: 536.9 GB, 536870912000 bytes 255 heads, 63 sectors/track, 65270 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xcdd8dc51
Device Boot Start End Blocks Id System /dev/sdb1 1 65270 524281243+ 8e Linux
Command (m for help): w (保存退出) The partition table has been altered!
Calling ioctl() to re-read partition table. Syncing disks. |
创建pv
Shell># pvcreate /dev/sdb1
成功提示信息如下
Physical volume "/dev/sdb1"successfully created
创建VG
Shell># vgcreate VGdata /dev/sdb1
成功提示信息如下
Volume group "VGdata"successfully created
创建LV卷
Shell># lvcreate -L 499.9G -n lv_mysqlVGdata
Rounding up size to full physical extent 500.00 G
Logical volume "lv_mysql" created
创建文件系统
Shell># mkfs -t xfs/dev/VGdata/lv_mysql
mkfs -t xfs /dev/VGdata/lv_mysql meta-data=/dev/VGdata/lv_mysql isize=256 agcount=4, agsize=32761600 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=131046400, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=63987, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 |
挂在到系统数据库存放目录/mysql
Shell># mount /dev/VGdata/lv_mysql/mysql/
验证
Shell># df –Th
Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg_node0-lv_root ext4 18G 768M 16G 5% / tmpfs tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 ext4 477M 25M 427M 6% /boot /dev/mapper/VGdata-lv_mysql xfs 500G 33M 500G 1% /mysql |
修改fstab使其重启后自动挂载,添加一下内容
Shell># vi /etc/fstab
/dev/VGdata/lv_mysql /mysql xfs defaults 0 0 |
到此,我们数据库文件系统准备完成!
剔除PV
Shell>#pvdisplay
--- Physical volume --- PV Name /dev/sda2 VG Name VolGroup PV Size 135.64 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 34722 Free PE 0 Allocated PE 34722 PV UUID Sr3Lbv-jc4H-5wWR-PRfN-I0kw-uQa6-dDCgiU
--- Physical volume --- PV Name /dev/sdb1 VG Name VolGroup PV Size 1.82 TiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 476799 Free PE 0 Allocated PE 476799 PV UUID TuHYZr-7TdQ-uK9X-g8eX-FVHD-EppY-LksHCW |
我们把2T的磁盘剔除PV组来
卸载分区
Shell># umount /home
针对ext2/3/4
检查下文件系统完整性
Shell># e2fsck/dev/mapper/VolGroup-lv_home
调整下文件分区
Shell># resize2fs/dev/mapper/VolGroup-lv_home 1024M
收缩lvm卷大小
Shell># lvreduce -L 1024M /dev/mapper/VolGroup-lv_home
WARNING: Reducing active logical volume to 1.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv_home? [y/n]: y Reducing logical volume lv_home to 1.00 GiB Logical volume lv_home successfully resized |
下线sdb1
Shell># pvchange -xn /dev/sdb1
转载于:https://blog.51cto.com/wqlszy2016/1891351