加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 在不丢失数据的情况下重新分区两个磁盘

发布时间:2020-12-13 16:34:26 所属栏目:Linux 来源:网络整理
导读:我在一家软件公司实习,而且我打了一个砖墙.这是交易: 问题:我们这里有一些盒子被错误地分区为2 x 500 GB驱动器.实际的驱动器是2 x 1 TB驱动器.这些本质上是机器,只使用了一半的可用磁盘空间.我的任务是编写一个脚本来重新分区这些驱动器. 解决方案迄今为止
我在一家软件公司实习,而且我打了一个砖墙.这是交易:

问题:我们这里有一些盒子被错误地分区为2 x 500 GB驱动器.实际的驱动器是2 x 1 TB驱动器.这些本质上是机器,只使用了一半的可用磁盘空间.我的任务是编写一个脚本来重新分区这些驱动器.

解决方案迄今为止:我有一个禁用所有进程和重新启动的脚本,然后是另一个修复分区的脚本.问题是数据丢失.

我在寻找:我需要一个能够解决所有数据的解决方案.我的第一个就是将分区增加到合适的大小,但我不确定这是否可行.另一种解决方案是将所有数据复制到Disk2,分区Disk1,将数据移回Disk1,最后分区Disk2.问题是我对Linux很新,我真的不知道怎么做.我可以访问fdisk实用程序和parted实用程序.

它们都是ext3类型.

编辑:11/3/11

好的.所以我在两个磁盘上都有大约1GB未使用的未分配空间.我想做如下:

>在SDB上创建一个大小为1GB的新扩展分区,称为sdb99,以供参考
>将sda5 sda6 sda7复制到新的SDB分区sdb99

>我可以将这些中的每个“/”复制到这个新分区中的某个文件夹吗?
>我是否需要在这个新分区上放置一个文件系统来复制那里的所有文件?
>如果我只是复制“/”,那会保留整个目录结构吗?
>像这样在磁盘之间移动文件是一项简单的任务吗?

>删除sda5 sda6 sda7,然后以两倍大小重新创建它们

>我真的需要删除这些吗?我不认为我可以增长3个连续的分区,即使我可以,文件系统也不会增长……对吗?

>将数据从sdb99复制回新的sda5 sda6 sda7分区

>这应该像移动包含所有“/”的目录的内容一样简单,对吧?

>将sdb5 sdb6 sdb7复制到新的sda5 sda6 sda7到单独的文件夹中.

>应该有足够的空间,因为现在可用的空间增加了……我希望如此

>删除并重新分区SDB
>将文件从sdb5 sdb6 sdb7移回SDB

有没有人看到任何明显的问题,有任何指针,警告,建议等?

感谢大家.同样,这需要编写脚本.谢谢.

编辑2
这是实际的脚本……

#!/bin/bash

LOG=./repartition.log 

date > $LOG 2>&1

echo "Ok,let's get started." >> $LOG 2>&1

# Resize logical partitons
parted -s /dev/sda resize 4 45GB 2000GB >> $LOG 2>&1
parted -s /dev/sdb resize 4 90GB 2000GB >> $LOG 2>&1

# Create the temporary file systems on disk 2
mke2fs -j /dev/sdb8 >> $LOG 2>&1

# Copy sda6 sda7 sda8 to sdb8
cp -r -L -p /dev/sda6 /dev/sdb8/home/sda6 >> $LOG 2>&1
cp -r -L -p /dev/sda7 /dev/sdb8/home/sda7 >> $LOG 2>&1
cp -r -L -p /dev/sda8 /dev/sdb8/home/sda8 >> $LOG 2>&1

# Remove NBD partitions on disk 1
parted -s /dev/sda rm 8 >> $LOG 2>&1
parted -s /dev/sda rm 7 >> $LOG 2>&1
parted -s /dev/sda rm 6 >> $LOG 2>&1

# Create NBD partitons on disk 1
parted -s /dev/sda mkpart logical 70GB 713GB >> $LOG 2>&1
parted -s /dev/sda mkpart logical 713GB 1356GB >> $LOG 2>&1
parted -s /dev/sda mkpart logical 1356GB 2000GB >> $LOG 2>&1

# Create the file systems on disk 1
mke2fs -j /dev/sda6 >> $LOG 2>&1
mke2fs -j /dev/sda7 >> $LOG 2>&1
mke2fs -j /dev/sda8 >> $LOG 2>&1

# Copy sda6 sda7 sda8 back to sda
cp -r -L -p /dev/sdb8/home/sda6 /dev/sda6 >> $LOG 2>&1
cp -r -L -p /dev/sdb8/home/sda7 /dev/sda7 >> $LOG 2>&1
cp -r -L -p /dev/sdb8/home/sda8 /dev/sda8 >> $LOG 2>&1

# Copy sdb5 sdb6 sdb7 to sda6 sda7 sda8
cp -r -L -p /dev/sdb5 /dev/sda6/home/sdb5 >> $LOG 2>&1
cp -r -L -p /dev/sdb6 /dev/sda7/home/sdb6 >> $LOG 2>&1
cp -r -L -p /dev/sdb7 /dev/sda8/home/sdb7 >> $LOG 2>&1

# Remove NBD partitions on disk 2
parted -s /dev/sdb rm 8 >> $LOG 2>&1
parted -s /dev/sdb rm 7 >> $LOG 2>&1
parted -s /dev/sdb rm 6 >> $LOG 2>&1
parted -s /dev/sdb rm 5 >> $LOG 2>&1

# Create NBD partitons on disk 2
parted -s /dev/sdb mkpart logical 90GB 726GB >> $LOG 2>&1
parted -s /dev/sdb mkpart logical 726GB 1362GB >> $LOG 2>&1
parted -s /dev/sdb mkpart logical 1362GB 2000GB >> $LOG 2>&1

# Create the file systems on disk 2
mke2fs -j /dev/sdb5 >> $LOG 2>&1
mke2fs -j /dev/sdb6 >> $LOG 2>&1
mke2fs -j /dev/sdb7 >> $LOG 2>&1

# Copy sdb5 sdb6 sdb7 back to sdb
cp -r -L -p /dev/sda8/home/sdb7 /dev/sdb7 >> $LOG 2>&1
cp -r -L -p /dev/sda7/home/sdb6 /dev/sdb6 >> $LOG 2>&1
cp -r -L -p /dev/sda6/home/sdb5 /dev/sdb5 >> $LOG 2>&1


rm /etc/init.d/fix_partitions >> $LOG 2>&1
rm /etc/init.d/local/99fix_partitions >> $LOG 2>&1
mv /etc/init.d/local/gca_init.off /etc/init.d/local/99gca_init >> $LOG 2>&1

echo "All set.  Please reboot.  Have a nice day." >> $LOG 2>&1

date >> $LOG 2>&1
reboot >> $LOG 2>&1

解决方法

为什么必须编写脚本?我重启了像RIP这样的启动光盘(可以救援)Linux中的X,运行gparted(图形工具),并从那里调整分区大小. Gparted能够在没有损坏的情况下调整分区大小(至少我没有遇到过NTFS的问题;在Linux分区中根本不需要这么做)

你应该有数据的备份

如果这是重要的数据,没有备份和分区播放,那简直太愚蠢了.或者是彻头彻尾的愚蠢,取决于数据的重要性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读