在不丢失数据的情况下对两个磁盘进行重新分区

在不丢失数据的情况下对两个磁盘进行重新分区

我在一家软件公司实习,遇到了一些困难。事情是这样的:

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

目前的解决方案:我有一个脚本可以禁用所有进程并重新启动,然后还有一个脚本可以修复分区。问题是数据丢失了。

我正在寻找:我需要一个可以做到这一点但可以保存所有数据的解决方案。我的第一个想法是将分区扩展到适当的大小,但我不确定这是否可行。另一个解决方案是将所有数据复制到 Disk2,对 Disk1 进行分区,将数据移回 Disk1,最后对 Disk2 进行分区。问题是我对 Linux 还很陌生,我真的不知道该怎么做。我可以访问 fdisk 实用程序和 parted 实用程序。

它们都是 ext3 类型。

编辑:11/3/11

好的。因此,两个磁盘上都有大约 1GB 未使用、未分配的空间。我想执行以下操作:

  • 在上创建新的扩展分区新加坡发展银行大小为 1GB,称为sdb99供此处参考
  • 复制sda5 sda6 sda7到新的新加坡发展银行分割sdb99
    • 我可以将每个分区中的“/”复制到这个新分区中的某个文件夹中吗?
    • 我是否需要在这个新分区上放置一个文件系统来复制其中的任何文件?
    • 如果我只是复制“/”,那会保留整个目录结构吗?
    • 像这样在磁盘之间移动文件是一项简单的任务吗?
  • 删除sda5 sda6 sda7然后重新创建两倍大小
    • 我真的需要删除这些吗?我认为我无法增加 3 个连续的分区,即使可以,文件系统也不会增加……对吗?
  • 复制回数据sdb99到新的sda5 sda6 sda7分区
    • 这应该像将包含所有“/”的目录的内容移回一样简单,对吗?
  • 复制sdb5 sdb6 sdb7进入新的sda5 sda6 sda7到单独的文件夹中。
    • 应该有足够的空间,因为现在可用空间增加了一倍……我希望
  • 删除并重新分区新加坡发展银行
  • 将文件从sdb5 sdb6 sdb7回到新加坡发展银行

有谁看到任何明显的问题,有任何指示、警告、建议等吗?

谢谢大家。再次,需求编写脚本。谢谢。

编辑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

答案1

为什么必须编写脚本?我会使用 RIP(可以进行救援)等启动盘在 X 中重新启动 Linux,运行 gparted(图形实用程序),然后从那里调整分区大小。Gparted 能够调整分区大小而不会造成损坏(至少我在 NTFS 上没有遇到过问题;在 Linux 分区上根本不需要这样做)

你应该备份数据

如果这是重要的数据,不备份并随意摆弄分区就太愚蠢了。或者说完全愚蠢,这取决于数据的重要性。

答案2

IIS 使用的帐户与用于映射的帐户不同。它是服务器 A 上的 IUSR 或 IWAM 帐户。服务器 B 可能将其视为 GUEST。从技术和安全角度来看,最简单、最准确的方法如下:

  1. 在服务器 B 上配置的共享上配置审计,以监视哪个用户正在尝试访问共享并向其中写入文件。
  2. 在服务器 B 上的共享上创建/更改用户帐户和/或权限。

相关内容