Linux两块磁盘挂载指向一个文件夹LVM磁盘管理(二)

注意:任何磁盘的操作有可能损坏里面数据,请提前备份数据,切记!切记!切记!

0x00:前言。

VG卷组的总空间是受物理磁盘大小限制,本教程有3块物理磁盘分别是100M、200M、300M,那么VG卷组总空间就是600M;而VG下所有的LV累加的总空间又受限于VG。

使用过程中LV早晚会用完,那么上面的/LVM挂载点只能同时挂载一个,而有些程序不能支持有两个文件目录,比如WEB只有一个/,还有MySQL。

0x01:扩展VG卷组、缩小VG卷组。

1)扩展VG卷组。

上一章讲我看到添加了3块物理磁盘,第一块(/dev/sdb1)已经加入VG组,这次来把第二块(/dev/sdc1)加入到之前的那个vgdata的VG组里。

首先还是格式化磁盘,并创建磁盘分区/dev/sdc1。这里图略,和之前一样。

  # fdisk /dev/sdc  //显示创建磁盘并和格式化,略去一些命令

略。

  # pvcreate /dev/sdc1   //普通磁盘转换成PV
  # pvs  //查看VG组信息
  # vgextend vgdata /dev/sdc1   //加入VG组,vgdata要加入VG组名,/dev/sdc1新PV

图里可以看到磁盘第一次pvs里只有一个PV,添加后,第二次pvs就又有多出一块PV。

  # vgdisplay  //查看VG卷组详细信息,VG的总空间已经由之前100M变成300M

2).缩小卷组。

实际使用中,因为磁盘损坏,或空间分配问题,我们需要从VG卷组删除一个PV物理卷。用过的PV物理卷肯定会被写入数据,那么在移走PV前,我们要先迁移数据。

先用pvdisplay命令看看上面PE块被写了多少数据,假如/dev/sdb1是要移走的物理硬盘。

注意,目的地空闲空间要大于/dev/sdb1。

我们准备了/dev/sdd1来存放迁移过来的数据。

从上图可以看出sdb1总空间是100M,然后空闲是0M,也就是使用了100M。

  # pvmove -i 1 /dev/sdb1 /dev/sdd1  //将sdb1数据移动到sdd1里,
                                              -i 1是每1秒钟报告一次数据迁移的进度。
  # vgreduce vgdata /dev/sdb1  //将/dev/sdb1从vgdata卷组中移除
  #  pvremove /dev/sdb1  //将/dev/sdb1移除出PV

结果:数据没有任何丢失。

0x02:扩展LV、缩小LV逻辑卷。

  1)VG卷组又有新的空间,而刚才创建的lvData(/dev/sdb1)已经使用完了,我们来扩展LV。

  # lvextend –L +50M /dev/vgdata/lvData
  或者
  # lvextend –l 150M /dev/vgdata/lvData

-L和-l区别,-L后是写你要增加多少,而-l是写你要增加到的总数。

执行命令后我们发现LV size变成150M了。

LV扩容完系统还没有识别,需要用resize2fs来更新,系统才能识别到。

  # resize2fs /dev/vgdata/lvData

2)缩小LV(逻辑卷)空间。

使用过程中LV空间总会分配不合理或大或小,如果分配大了,不用又造成空间浪费,现在将LV(逻辑卷)缩小以分配给其他LV(逻辑卷)用。

我们之前创建了一个LV(逻辑卷),挂载到了/LVM下。

调整钱我们先要卸载挂载点,因为挂载后是使用状态,不允许操作。如图,卸载成功。

  # umount /LVM

检查文件系统是否有坏块,这部检查必须要做。

  # e2fsck -f /dev/mapper/vgdata-lvData

从上面df -h 知道,总空间287M,使用128M,剩余146M空间。我们缩小总空间到250M,做演示。

注意:缩小LV前,先要缩小PV,resize2fs在前,lvreduce在后,顺序不能错。

  # resize2fs /dev/mapper/vgdata-lvData 250M  //缩小PV

  # lvreduce -L 250M /dev/mapper/vgdata-lvData
  或
  # lvreduce -L -50M /dev/mapper/vgdata-lvData  //-50M,在原基础上减去50M空间。

好了,缩减成功,挂载看看。

   # mount -a

   # mount /dev/vgdata/lvData  /lvm

因为PE默认4M,我们给的250M的PE不一定对其,所以系统会从新计算PE倍数来对其,显示的数就会小于我们写的数。

注意:/dev/mapper/vgdata-lvData和/dev/vgdata/lvData是一样的,指向同一路径。

查看PV有多少空闲空间。显示多出48M的空闲空间。

  # pvs

参考文章:

http://dreamfire.blog.51cto.com/418026/1084729/

http://www.linuxidc.com/Linux/2016-06/132709.htm

https://www.cnblogs.com/mchina/p/linux-centos-logical-volume-manager-lvm.html

http://www.linuxidc.com/Linux/2017-05/143774.htm

时间: 2024-10-10 02:11:36

Linux两块磁盘挂载指向一个文件夹LVM磁盘管理(二)的相关文章

Linux两块磁盘挂载指向一个文件夹LVM磁盘管理(一)

注意:任何磁盘的操作有可能损坏里面数据,请提前备份数据,切记!切记!切记! 0x00:前言. 在Linux使用过程中,发现一个文件很大,比如5G,但是有两块物理磁盘一个剩下4G,一个剩3G,磁盘空间不够,这样肯定不能放进去.如果把5G文件分割了是可以放进去,但是如果有很多文件呢!这时候就可以用LVM来帮我们来管理文件是放到哪个磁盘里. 注意:LVM用于单块硬盘小于2TB的分区,如果超过2TB用part分区,不建议用LVM会识别不了. 0x01:文本对照. 物理磁盘:即你购买来能拿在手里的那一块磁

Linux查看一个文件夹大小

1.Linux查看一个文件夹大小: du -sh /home/yangkun [[email protected] bin]$ du -sh /home/yangkun/ 164M /home/yangkun/ 2.Linux查看某个目录下所有文件的大小:du -h /home/yangkun [[email protected] bin]$ du -h /home/yangkun/ 4.0K /home/yangkun/.config/abrt 8.0K /home/yangkun/.conf

Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Simple

linux怎么查看一个文件夹的大小

linux查看一个文件夹的大小的命令为: du --max-depth 1 -lh 该文件夹的完整路径 例,查询/var文件夹的大小: du --max-depth 1 -lh /var du 递归查询该路径下所有文件的大小(若不加任何参数,则显示文件夹内的所有文件,包括文件夹内子文件夹的内容). 命令解释: 参数 --max-depth 1 -lh 设置递归深度为1,及不查询子文件夹.因而使用此参数只显示该文件夹的大小,不显示其中子文件夹的大小. 注意: 视操作系统版本不同,命令可能为: du

Linux递归解压缩一个文件夹下的所有文件

gunzip -r hongchangfirst/data 如何递归删除那些剩余的非log结尾的文件? 先列出确认一下: find hongchangfirst/data -type f ! -name "*.log" 然后真正的删除: find hongchangfirst/data -type f ! -name "*.log" -exec rm -f {} \; 记住后边-exec一定要加空格,否则会出现find: missing argument to `-

从键盘接收两个文件夹路径,把其中一个文件夹(包含内容),拷贝到另一个文件夹中

package cn.it.text; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Scanner; /* * 1.从键盘接收两个文件夹路径,把其中一个文件夹(包含内容) * 拷贝到另一个文件

【Java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝的另一的文件夹的操作

一.基本目标 使用Java完成如下的操作: 把一个文件夹内的所有文件拷贝的另一的文件夹,例如,在F盘中有a与b两个文件夹: f:/a里面有一堆文件,运行Java程序之后就会全部复制到f:/b,并且完成重命名,在所有文件之前加rename_的前缀,如果里面有文件夹,则文件夹不重命名,里面的文件进行重命名,同样在所有文件之前加rename_的前缀: 二.制作过程 1.首先主函数非常简单,就是调用了上面FileTest类中的copyFolder函数 public class FileCopy { pu

linux下的c语言编程删除文件夹

刚刚在学习开始做新项目的时候,学长布置了一项任务,就是在给定一个目录下,要将这个目录下一个星期之前的目录包括里面的文件全部删除,只保留这一个星期内的.百度了好久的资料,终于完成,记录一下防止忘记.(注:文件夹名称默认为日期格式,如20140716) #include<dirent.h> #include<sys/types.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #i

Java遍历一个文件夹下的全部文件

Java工具中为我们提供了一个用于管理文件系统的类,这个类就是File类,File类与其它流类不同的是,流类关心的是文件的内容.而File类关心的是磁盘上文件的存储. 一,File类有多个构造器,经常使用的构造器有: 1.public File(String pathname){} 在pathname路径下创建文件对象 2.public File(String path,String name){} 在path參数指定的文件夹中创建具有给定名字的File对象.假设path为null,构造器将使用