![重新分配分区空间而不丢失数据](https://linux22.com/image/547574/%E9%87%8D%E6%96%B0%E5%88%86%E9%85%8D%E5%88%86%E5%8C%BA%E7%A9%BA%E9%97%B4%E8%80%8C%E4%B8%8D%E4%B8%A2%E5%A4%B1%E6%95%B0%E6%8D%AE.png)
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md0 1829037 1745454 0 100% /
tmpfs 255940 0 255940 0% /lib/init/rw
udev 10240 44 10196 1% /dev
tmpfs 255940 0 255940 0% /dev/shm
/dev/mapper/sys-srv 206424760 35519164 160419836 19% /srv
这是我服务器上的 df 的输出。很明显我需要 md0 中的空间,我想从 /srv 中获取它。有人能弄清楚我的磁盘设置并建议我如何将分区上的 2gb 增加到 10 或更多吗?
pvs 输出:
Incorrect metadata area header checksum
Incorrect metadata area header checksum
Incorrect metadata area header checksum
Incorrect metadata area header checksum
Incorrect metadata area header checksum
Incorrect metadata area header checksum
PV VG Fmt Attr PSize PFree
/dev/md0 lvm2 -- 232.88G 232.88G
/dev/md1 sys lvm2 a- 231.02G 29.02G
vgs输出:
Incorrect metadata area header checksum
VG #PV #LV #SN Attr VSize VFree
sys 1 2 0 wz--n- 231.02G 29.02G
lvs 输出:
Incorrect metadata area header checksum
LV VG Attr LSize Origin Snap% Move Log Copy%
srv sys -wi-ao 200.00G
swap sys -wi-ao 2.00G
fdsik -l 输出:
Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 243 1951866 fd Linux raid autodetect
/dev/sda2 244 30401 242244135 fd Linux raid autodetect
Disk /dev/sdb: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 243 1951866 fd Linux raid autodetect
/dev/sdb2 244 30401 242244135 fd Linux raid autodetect
Disk /dev/md0: 1998 MB, 1998585856 bytes
2 heads, 4 sectors/track, 487936 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md0 doesn't contain a valid partition table
Disk /dev/md1: 248.0 GB, 248057888768 bytes
2 heads, 4 sectors/track, 60561008 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md1 doesn't contain a valid partition table
Disk /dev/dm-0: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-0 doesn't contain a valid partition table
Disk /dev/dm-1: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-1 doesn't contain a valid partition table
答案1
您需要添加更多细节。分区布局(的输出fdisk -l
)和df
输出中的 /dev/mapper 可能意味着您正在使用 LVM,因此如果是这种情况(的输出pvs; vgs; lvs
),也是如此。此外,您的 rood 的内容/proc/mdstat
似乎已进行 RAID。
您的输出暗示 RAID 和 LVM 的混合df
将使重新排列空间变得更加困难,如果/
和/srv
都位于同一个 LVM 卷组中 - 您可能会发现检查备份、擦除机器、重新排列以及从备份中恢复数据和配置更快更容易。您可以通过缩小/svr
、用释放的空间创建新卷、移动文件并将它们安装在正确的位置来将一些内容移出根文件系统 - 这会为您赢得一些空间,直到您可以安排更大的更改。/home
通常也是一个很好的候选者/var/log
,但这取决于空间的使用位置。此外,作为快速胜利,请确保您已清除软件包缓存(aptitude clean
在类似 Debian 的系统上)并移动/var/log
您不太可能需要的任何旧日志。
编辑:(添加额外细节后)
您的设置似乎有问题,因为 md0 看起来像一个作为简单文件系统安装的 ~2Gb 卷,但 LVM 却将其列为(大得多的)pv。
不过,您的其他 pv/vg 上有大量可用空间,因此除非您需要这些空间(例如,因为您正在使用基于 LVM 快照的方法以最少的停机时间进行一致备份),否则您可以将根目录移到那里。基本过程如下:
- 在当前 / 上腾出一些空间(清理临时文件,删除包缓存和/或旧日志),这样你就不会在空间上耗尽
- 使用 lvcreate 为新的根文件系统添加所需大小的逻辑卷
- 从 LiveCD 或类似设备启动(救援模式/单用户模式启动可能也行得通,而且更有可能理解您的 RAID/LVM 布局,而无需额外的麻烦)。希望此实例(救援启动或 live cd)可以看到您的 RAID 和 LVM 设置,在这种情况下:
- 使用 复制文件系统原始文件
dd if=/dev/md0 of=/dev/mapper/sys-root
,调整其大小以填充更大的逻辑卷resize2fs /dev/mapper/sys-root
(它会要求您fsck
先运行,按照其说明执行此操作),并使用 为复制的文件系统赋予一个新的 UUIDuuidgen
(tune2fs /dev/hdaX -U <uuid-generated-by-uuidgen>
还请记下该 UUID,您可能需要它) - 挂载新的文件系统并更新
/etc/fstab
以引用新文件系统而不是旧文件系统 - 重新启动并手动告诉 grub(我假设是 grub,如果是旧安装,您可能仍在使用 lilo 作为引导加载程序)启动这个新文件系统,而不是旧的
- 如果这样有效,你应该可以愉快地以 root 身份使用新的文件系统,更新它的 grub 配置以包含新的设置作为选项,然后使用新的配置重新运行 grub-install
- 你仍旧有文件系统,并且 grub 配置为提供新旧文件系统之间的双启动,以防以后发现错误
(由于工作 ATM 正在休息,所以我没有时间研究上述操作所需的确切命令/程序 - 请查阅相关文档/论坛以获取更多详细信息)
与任何主要操作如下:在继续操作之前确保您的备份是最新的,和/或将完整的原始副本或磁盘/文件系统带到另一个驱动器,以防出现不可逆转的错误。
答案2
您的 /srv 设备正在使用 LVM,它允许您在 LVM 管理的设备池中相当自由地重新分配磁盘空间,不幸的是,您的根分区似乎直接从您的 md0 RAID 阵列上挂载,因此您可能无法通过 LVM 重新分配空间。
相反,您可以使用 将 / 中的内容的一部分挂载到 /srv 下mount --bind
,这使得需要位于 / 下的内容的一部分存在于 /srv 中,从而释放 /dev/md0 上的部分空间。
我建议您可以重新定位主区域 (/home) 或 /var 挂载点,因为它们通常较大,但您可以通过使用它来自己调查这一点,du -sh /*
以了解 / 下所有内容的磁盘使用情况。
然后,您可以将大目录的内容复制到 /srv 并绑定挂载它,然后将 / 重新挂载到其他位置以删除复制目录的旧内容,示例方法:
mkdir /srv/var
cp -a /var/* /srv/var/
mount --bind /var /srv/var
mkdir /tmp/root
mount /dev/md0 /tmp/root
#rm -rf /tmp/root/var
请注意,如果您正在操作文件系统中可能正在使用的任何部分,那么最好在单用户模式下进行操作,并且要小心!您可能只想重命名 / 上的复制分区以进行测试,以确保它在删除之前可以正常工作。