我的磁盘有两个分区:sda1 和 sda2。我想将 sda1 的编号更改为 sda2,将 sda2 的编号更改为 sda1。
有可能,但我不记得过程了。即我的第一个分区将是 sda2,第二个分区是 sda1,因此我需要指定手动顺序,而不是像 fdisk -> x -> f 中那样的自动排序。
我怎样才能更改订单?也欢迎提供手册或教程的链接。
谢谢。
原因:我有一个应用程序需要从 sda1 读取数据,但数据在 sda2 中。更改分区表是解决此问题的最快方法。该系统并不重要,但我不想让系统停止太长时间。
更新:OpenBSD 的 fdisk 版本包含此功能。
答案1
我只是以一种更简单的方式做到了这一点:
# sfdisk --dump /dev/sdb > sdb.bkp
为了安全起见,留下一份副本
# cp sdb.bkp sdb.new
现在编辑 sdb.new 仅更改行顺序和分区号,如我的情况:
从
# partition table of /dev/sdb
unit: sectors
/dev/sdb1 : start= 1026048, size=975747120, Id=83
/dev/sdb2 : start= 2048, size= 204800, Id=83
/dev/sdb3 : start= 206848, size= 819200, Id= b
/dev/sdb4 : start= 0, size= 0, Id= 0
到
# partition table of /dev/sdb
unit: sectors
/dev/sdb1 : start= 2048, size= 204800, Id=83
/dev/sdb2 : start= 206848, size= 819200, Id= b
/dev/sdb3 : start= 1026048, size=975747120, Id=83
/dev/sdb4 : start= 0, size= 0, Id= 0
然后把它扔回磁盘分区表?
# sfdisk /dev/sdb < sdb.new
在我缩小并右移唯一的分区(sdb1)以在磁盘开头添加两个较小的分区后,我的编号顺序被破坏了gparted
。
如果最后一个命令不起作用(如我的情况),请将其更改为:
# sfdisk --no-reread --force /dev/sdb < sdb.new
答案2
供参考,这是一个坏主意你可能会失去一切。如果您仍想这样做,请执行以下步骤:
- 不做吧。如果这没有帮助,那么:
使用该
sfdisk
工具:首先,使用以下命令对分区表进行备份sfdisk -d /dev/sda > sda.out
然后就去做吧:
sfdisk /dev/sda -O sda-partition-sectors.save
你会看到类似这样的东西
Checking that no-one is using this disk right now ... OK Disk /dev/sda: 1018 cylinders, 124 heads, 62 sectors/track Old situation: Units = cylinders of 3936256 bytes, blocks of 1024 bytes, counting from 0 Device Boot Start End #cyls #blocks Id System /dev/sda1 0+ 5 6- 23063+ 83 Linux /dev/sda2 6 1017 1012 3890128 83 Linux /dev/sda3 0 - 0 0 0 Empty /dev/sda4 0 - 0 0 0 Empty Input in the following format; absent fields get a default value. <start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s> Usually you only need to specify <start> and <size> (and perhaps <type>). /dev/sda1 :
现在它要求您提供“sda1”分区的新详细信息。所以你必须在这里给出sda2的编号。所以,我在这里输入“6 1012”并按 Enter:
/dev/sda1 :6 1012
/dev/sda1 6 1017 1012 3890128 83 Linux
/dev/sda2 :
现在查看如果按 Enter 键后打印的数字是确切地与之前为 sda2 打印的内容相同。如果可以的话,继续为 sda2 提供新的数字:
/dev/sda2 :0
/dev/sda2 0+ 5 6- 23063+ 83 Linux
/dev/sda3 :
这次在我的例子中输入“0”就足够了 - 但你必须确保你的数字没有弄乱。
接下来,以同样的方式继续其他分区。如果您已经到达磁盘末尾,按 Enter 就足够了。最后,再次检查所有数字是否正确并保存分区表(或不保存)。如果你搞砸了,请查看man sfdisk
“-d”、“-O”和“-I”选项的说明。
另请注意,一旦进行了疯狂的更改,您可能需要运行“同步”,以便在尝试挂载分区之前重新读取分区。
答案3
所有现有的解决方案看起来都非常安全,但结果却相当复杂。
我想重新订购全部我的分区,这样它们就井然有序了。
如果你更有经验,有非必要或备份数据,并且乐意修复任何问题,你可以从 Live CD 启动并这样做:
sudo fdisk /dev/sdX
然后:
x
进入专家模式f
修复驱动器顺序(i
如果需要,可以忽略任何警告)r
返回正常模式w
将更改写入磁盘并退出
额外的
我不记得接下来的具体步骤,因为我只做了一次并且没有重新测试,但由于我也在移动安装,所以我还安装了分区并复制所有文件:
sudo mkdir /mnt/sda4
sudo mount /dev/sda4 /mnt/sda4
sudo mkdir /mnt/sda5
sudo mount /dev/sda5 /mnt/sda5
date;cp -a /mnt/sda4/* /mnt/sda5;date
然后获取分区 ID:
sudo blkid
并更新了以下内容以反映新的分区 UUID 值:
/mnt/sda5/boot/grub/grub.cfg
/mnt/sda5/etc/fstab
我然后更新了 GRUB2:
sudo grub-install --root-directory=/mnt/sda5 /dev/sda
答案4
您必须重写驱动器分区表才能颠倒顺序,这样做有点冒险。如果我是您,我会解决使您想要交换设备名称的顺序并保留分区的问题。
例如,如果您有一个需要在两台计算机上运行的脚本,并且希望它访问同一设备,则在不同的目录(不是 /dev)中创建一个链接,该链接在两台服务器上具有相同的名称,但链接到 /一个是 dev/sda1,另一个是 /dev/sda2。
您可以使用任何分区编辑器(fdisk
或cfdisk
)来编辑分区,但您需要记下当前设置或拍摄屏幕照片。删除两个分区,然后手动创建它们,并指定所有正确的值。使用 LiveCD 引导系统即可执行此操作。