在尝试解决Windows 问题,我使用的工具删除了我的一些分区。我使用测试磁盘恢复我的分区。
虽然它成功恢复了我所有的数据分区,但却无法恢复我的交换分区。通常情况下,这没什么大不了的,因为创建另一个交换分区很容易。但在这种情况下,它也没有找到我的扩展分区,所以我恢复的所有分区都是主分区,而不是逻辑分区。现在,我无法再创建任何分区了。
我想重新创建我的活动前显示的布局fstab
:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda5 during installation
UUID=65340dbf-705f-409d-8bfa-54f408fe23c9 / ext4 errors=remount-ro 0 1
# /extra was on /dev/sda8 during installation
UUID=6921d03e-e64f-4403-9381-be2b2eed62e2 /extra ext4 defaults 0 2
# /home was on /dev/sda6 during installation
UUID=b1c33077-6a9b-4e1c-bde5-d44efc96ffbd /home ext3 defaults 0 2
# /windows was on /dev/sda1 during installation
UUID=F624495B2449204B /windows ntfs defaults,umask=007,gid=46 0 0
# swap was on /dev/sda2 during installation
#UUID=1e3afc3a-152e-44ab-9275-c5ca30efad0f none swap sw 0 0
# swap was on /dev/sda7 during installation
#UUID=2e41ce67-2a25-4ed3-a64e-b5480172477b none swap sw 0 0
/dev/mapper/cryptswap1 none swap sw 0 0
/dev/mapper/cryptswap2 none swap sw 0 0
# tmpfile stuff
tmpfs /tmp tmpfs defaults,size=512M,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=32M,mode=1777 0 0
fdisk
这是我当前的布局,以输出和 GParted 屏幕截图的形式表示:
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bfc8b
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 41945087 20971520 7 HPFS/NTFS/exFAT
/dev/sda2 41955328 83898367 20971520 83 Linux
/dev/sda3 83900416 764268543 340184064 83 Linux
/dev/sda4 764276373 970486649 103105138+ 83 Linux
GParted 截图 http://img7.imagebanana.com/img/vqt7wwq6/Screenshotfrom2012052800_04_35.png
显然,我不想删除任何数据来执行此操作。是否有任何工具可以做到这一点?似乎如果我可以在低级别编写分区表,我就能做到这一点。你有什么建议?
顺便说一句,我使用加密的主目录(不是$HOME
)/home
,之前我的交换区也是加密的。我不知道加密交换区是如何设置的。
答案1
您不需要手动编辑分区表,只需使用 gparted 重新创建旧分区表,然后使用cp -p
或dd
将旧分区复制到新分区中即可。
外部存储要求
如何操作取决于您的外部存储功能。如果您有另一个可以复制分区的驱动器,则应将主分区复制到外部驱动器上的映像(用于dd
)或目录(用于cp
),然后创建一个空的逻辑分区并将映像复制到这个新的空分区中。这将是处理事情的最佳方式。
要将分区作为映像备份到某处(sda1 是第一个硬盘上的第一个分区):
sudo dd if=/dev/sda1 of=[path to where you want to store the image] bs=1M noerror
要将分区复制到目录(保留权限),首先挂载它们,然后:
sudo mkdir /[path to where you want to store them]/partition-backup1
sudo cp -pr /media/mounted-partition-to-be-copied /[path to where you want to store them]/partition-backup1
有关cp
和 的更多信息,请参阅下文dd
。
如果你没有外部存储
但是,如果您没有足够的空间/时间先将分区复制到外部存储,则可以使用创造性调整大小/复制在同一驱动器上完成整个移动。换句话说,您可以将具有大量可用空间的分区调整为较小的大小,以便您有空间创建新的重复逻辑分区,然后删除旧分区并在复制后重新调整大小。您还需要将一个分区临时存储为另一个分区内的映像,以便创建扩展分区。
但是,如果任何分区(/home、swap 等)已加密,请小心。如果是这样,调整它们的大小将非常非常危险。有一个调整加密分区大小的指南这里但我不建议这样做,除非你真的找不到任何外部存储来避免这一步。
将旧的主分区复制到新的逻辑分区
第一的确保您手边有一张 liveCD/USB,稍后您可能需要重新安装 GRUB。
我在这里假设您已经评估了最适合您的方法,并且现在已经创建了一个空的新逻辑分区,并且可以访问旧的主分区或外部存储的分区映像。
您可以使用cp
哪个文件逐个复制,也可以使用dd
哪个文件复制原始数据块。对于任何加密分区,您将必须使用dd
。我个人认为,如果使用正确,dd
会更安全,因为您不必担心权限/所有权/符号链接等。但是,如果您使用错误,dd
则会破坏某些东西。
使用方法cp
:(对于非加密分区)首先安装分区的旧主版本和新的空逻辑分区。然后将文件从旧分区复制到新分区。该-p
选项保留文件的权限和所有者,这样您就不会弄乱权限,-r
只需递归复制即可。但是,它无法创建所有者权限高于运行该命令的人的文件,因此您应该以 root 身份运行此命令。
sudo cp -pr /media/[mounted-old-primary]/ /media/[mounted-empty-logical]/
这可能需要一段时间。
使用方法dd
:您需要绝对确定新旧分区的分区名称。您还应该克隆大小完全相同的分区(或克隆到更大的分区 - 风险自负)。不要尝试克隆到比原始分区小的分区。dd
将覆盖命令复制到的任何设备。使用 gparted GUI 来获得正确信息,或者您可以运行sudo fdisk -l
以查看分区表。一旦您确定了名称,请运行命令dd
(必须以 root 身份运行才能将目录写入设备)
人们在谷歌上搜索:除非你了解以下命令的作用并且已将分区名称更改为你想要复制/覆盖的分区,否则请不要运行以下命令
sudo dd if=/dev/sda2 of=/dev/sda6 bs=1M noerror
在此示例中sda2
,是原始主分区,sda6
是新的空逻辑分区。每次操作之前,请务必检查是否已正确更改路径。
如果您要从备份的映像复制,请运行以下命令:
sudo dd if=/path/to/image.img of=/dev/sda6 bs=1M noerror
top
这两种方法都需要花费一些时间。您可以通过检查并记录各种相关进程的运行情况来确保它们仍在运行。
打扫干净
请勿删除任何内容,除非您确定已正确复制并且不再需要备份。也就是说,一旦您成功将所有内容复制到新的逻辑分区上,您将需要删除旧的主分区并根据需要调整所有分区的大小。
您根本没有触碰过 MBR,但是如果您移动了/boot
其上的分区,您将需要重新安装/升级 GRUB 以便它指向新的分区。
通过挂载目录从 liveCD 重新安装 GRUB /
(将 sda3 替换为您所需的分区)
sudo mount /dev/sda3 /mnt
此时,您可以运行sudo grub-install --root-directory=/mnt /dev/sda
以重新安装 grub,但您仍需update-grub
要从本机安装运行(即从 GRUB 命令行进行救援启动)以更新配置文件。我们可以结合这两个步骤,并使chroot
该分区成为/
liveCD 的/
文件系统。
(这部分主要基于https://help.ubuntu.com/community/Grub2/Installing)
挂载关键虚拟文件系统。以单个命令的形式运行以下命令:
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
Chroot 进入你的正常系统设备:
sudo chroot /mnt
重新安装 GRUB 2:
grub-install /dev/sda
重新创建 GRUB 2 菜单文件 (grub.cfg)
update-grub
退出 chroot:CTRL+D
重启。
sudo reboot
答案2
拥有加密的 /dev/sda3 对此没有帮助。没有工具可以自动将分区移动到扩展分区。您必须手动执行此操作,但好消息是,您只有 70 多 GB 的数据需要备份和恢复。
我建议您备份 /dev/sda3 (home) 和 /dev/sda4 (extra) 中的数据并删除分区。我注意到您最初实际上有两个交换分区。
备份数据后,删除 /dev/sda3 和 /dev/sda4,并在其位置创建一个扩展分区。然后,您可以根据需要为 /home、swap 和 extra 创建分区。我建议对 /home 使用 ext4(而不是您目前使用的 ext3),并且除非您那里有非常敏感的数据,否则不要加密。考虑一下“extra”是否对您的需求来说是多余的。
使用卷标作为在 fstab 中安装分区的基础似乎效果很好。分配分区标签后,只需在 fstab 中将“UUID=uuid”更改为“LABEL=volume_label”即可。手动执行此操作更容易,以后更改也更容易,因为您不必处理意大利面条式的 uuid 数字。不过,我不确定您是否可以为交换分区分配卷名。
克里斯