首页 > 代码库 > linux系统初始化--​-调整linux文件系统

linux系统初始化--​-调整linux文件系统

调整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=http://www.mamicode.com/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=http://www.mamicode.com/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


本文出自 “蓝色之翼” 博客,请务必保留此出处http://wqlszy2016.blog.51cto.com/2668358/1891351

linux系统初始化--​-调整linux文件系统