Fork me on GitHub
Suzf  Blog

Tag lvm

How to Decrease an LVM Partition

Here we show you how to shrink an LVM volume or partition in Linux by first resizing the file system followed by resizing the logical volume.

See here if you’re instead trying to do the opposite and expand an LVM volume.

 

Note: In this example we are working in CentOS 7, some commands may differ in different Linux distributions. As of CentOS 7 the default file system is XFS which is not currently possible to shrink, this example is working with the ext4 file system.

In this example we will work through shrinking logical volume /var/centos/var from 10GB to 5GB.

Overview of Logical Volume Manager (LVM)

Before working through the resizing process it’s important you first understand some basic concepts around physical volumes, volume groups, logical volumes, and the file system.

  • Physical Volume (PV): This can be created on a whole physical disk (think /dev/sda) or a Linux partition.
  • Volume Group (VG): This is made up of at least one or more physical volumes.
  • Logical Volume (LV): This is sometimes referred to as the partition, it sits within a volume group and has a file system written to it.
  • File System: A file system such as ext4 will be on the logical volume.

[译] Moving a Volume Group to Another System

您可以将整个LVM卷组移动到另一个系统。建议您在执行此操作时使用 vgexport 和 vgimport 命令。

vgexport:使非活动卷组无法访问系统,它允许你分离物理卷。
vgimport:在执行vgexport命令使其禁用之后,再次使机器可以访问卷组。

一个系统卷组移动到另一个系统,请执行下列步骤:

1. 确保现在没有用户正在访问卷组中活动卷上的文件,然后卸载逻辑卷。

2. 使用vgchange命令的-a n 标记卷组为无效,以防止卷组上的任何进一步的活动。

3. 使用vgexport命令导出卷组。这可以防止由要从中删除它在系统被访问。

当您导出卷组后,在你执行pvscan命令时,物理卷将显示为导出卷组。如下面的例子。

# pvscan
PV /dev/sda1    is in exported VG myvg [17.15 GB / 7.15 GB free]
PV /dev/sdc1    is in exported VG myvg [17.15 GB / 15.15 GB free]
PV /dev/sdd1   is in exported VG myvg [17.15 GB / 15.15 GB free]
...

当系统下一次关机,就可以拔下构成卷组的磁盘,并将它们连接到新的系统。

4. 当这些磁盘被插入到新的系统之后, 使用 vgexport 命令导入,使得新的系统可以访问它。

5. 激活卷组 使用 vgchange -ay volune-group

6. 挂载文件系统,使其可用。

源文:Moving a Volume Group to Another System

 

How-to rechange debian system root password

Debian Linux 系统忘记密码怎么办?
看到很多人老在论坛里面问这个问题,有的人给的答案也不多。特拿出来,随便当笔记用。

对于一些版本的OS(如RedHat)来说,编辑grub,在后面加上“single”即可进入单用户模式。
但是对于debian来说,这种方式是无效的,因为debian进入单用户模式也需要你输入root用户的密码。

1.在grub选项菜单’Debian GNU/Linux,…(recovery mode)’,按e进入编辑模式

2.编辑kernel那行最后面的 ro single 改成 rw single init=/bin/bash,按 b / F10 执行重启

3.进入后执行下列命令

如果有 lvm , 可将卷组 激活后在挂载
#  lvscan                           #查看卷组激活状态,及卷组中有哪些逻辑卷。
ACTIVE            '/dev/vol1/opt' [16.50 GiB] inherit
ACTIVE            '/dev/vol1/usr' [1.91 GiB] inherit
... ...
#  vgchange -ay /dev/vol1           # 激活卷组

... ...

root@(none)# mount -a

root@(none)# passwd root

root@(none)# reboot

 

LVM 基本原理与实践

目录:
一: LVM原理详解
二: LVM创建
三: LVM的增大和放缩
四: LVM快照
五: 相关扩展阅读
六: LVM 优缺点

How-to Use LVM Snapshot To Backup MySQL

如果你Mysql的数据存储在LVM逻辑卷上,那么使用 LVM Snapshot 是对Mysql数据取得一个时间点的完全备份的一个低影响行为的一个方法。唯一的困难是,必须保证数据文件处于`安全`的状态(即所有数据已经写到硬盘文件,而不是仅仅存在于内存中);

为什么基于快照备份Mysql是一个好的选择?

大部分场景接近热备份 您可以在应用程序运行时执行这种类型的备份。无需关闭服务,只需设置只读或是类似的操作。

支持所有本地磁盘存储引擎 它适用于MyISAM和Innodb和BDB,它也适用于Solid,PrimeXT和Falcon存储引擎。

低开销 因为它只是文件副本 因此对服务器的开销是最小的

快速备份

易于对数据进行压缩归档备份 将其备份到磁带,FTP或任何网络备份软件;它很容易,因为你只需要复制文件。

快速恢复 恢复时间与将数据恢复和标准MySQL崩溃恢复一样快,并且可以进一步减少。

免费没有额外的商业工具,Innodb热备份需要执行备份。

不过这里也有些不足之处

显然易见这里需要快照的兼容性

可能会需要 root 权限

很难预测停机时间我提到这个解决方案通常是热备份,但糟糕的是,很难估计它是什么时候,它是不是 - FLUSH TABLES WITH READ LOCK 可能需要相当长的时间在具有长查询的系统上完成。

多个卷上的数据的问题 如果您在单独的设备或仅跨越多个卷的数据库上有日志,则会遇到麻烦,因为您无法在所有数据库中获得一致的快照。 一些系统可能能够对许多卷执行原子快照。

下面是是使用LVM Snapshot备份的基本过程

1. 打开多个终端会话,一个用于登陆Mysql 执行相关命令; 一个用于生成LVM 快照

2. 在终端会话1中,连接Mysql 设置读锁;所以不会再有新的数据写入。但是不要使用 `mysqladmin` 执行操作,并确保您的数据库会话保持打开,否则读取锁将在客户端断开连接时立即删除。

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;    # 重建 Mysql Slave

3. 在另一个终端会话中,创建 Mysql 数据卷的 LVM 快照。在本例中,我们假设 数据目录为 /var/lib/mysql LVM 逻辑卷名称为 /dev/vg0/mysql. 确保快照的空间足够大,以便在执行备份时有足够的空间容纳新数据进入数据库。如果空间给的太小,快照会失效备份也会终止。

lvcreate -L8G -s -n mysql-backup /dev/vg0/mysql

4. 回到之前打开Mysql 连接会话的终端,释放读锁;这样正常的数据操作就恢复了

UNLOCK TABLES;

5. 挂载快照到方便的地方

mkdir -p /mnt/mysql-backup
mount -o nouuid -t xfs /dev/vg0/mysql-backup /mnt/mysql-backup

如果你现在查看 /mnt mysql-backup 的内容,你应该看到一个 /var/lib/mysql 的副本,就像创建快照时的一样。

6. 使用您选择的方法将整个目录复制到您选择的位置。 例如

tar -C /mnt -czf ~/mysql-backup.tar.gz mysql-backup

或者启动一个新的Mysql实例,将数据导出

7. 一旦完成备份, 卸载 并移除快照

umount /mnt/mysql-backup
lvremove -f /dev/vg0/mysql-backup

如上所述,在创建快照时,数据库连接必须保持打开状态,以便保持锁定。编写脚本的唯一方法是使用支持数据库连接的语言。 这里是一个perl的例子。

#!/usr/bin/perl

use DBI;

# Connect to the local database
$dbh = DBI->connect('DBI:mysql:host=localhost;database=mysql', 'root', 'password') || die;

# Flush and lock tables to prepare for LVM snapshot
$dbh->do('FLUSH TABLES WITH READ LOCK;');

# Create LVM snapshot volume
system('lvcreate -L8G -s -n mysqlbackup /dev/vg0/mysql');

# Release table lock
$dbh->do('UNLOCK TABLES;');

# Disconnect from database
$dbh->disconnect();

相关链接

[0] https://dev.mysql.com/doc/refman/5.7/en/backup-methods.html

[1] https://www.percona.com/blog/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/

[2] https://www.badllama.com/content/mysql-backups-using-lvm-snapshots