Linux

將分區號從 sda1 更改為 sda2

  • February 17, 2020

我有一個有兩個分區的磁碟:sda1 和 sda2。我想將 sda1 的數量更改為 sda2,將 sda2 的數量更改為 sda1。

這是可能的,但我不記得過程。即我的第一個分區將是 sda2 和第二個 sda1,所以我需要指定手動順序,而不是像 fdisk -> x -> f 中的自動排序。

如何更改訂單?也歡迎連結到手冊或教程。

謝謝。

原因:我有一個應用程序需要從 sda1 讀取數據,但數據在 sda2 中。更改分區表是解決此問題的最快方法。該系統並不重要,但我不想讓系統停止太長時間。

更新:OpenBSD 的 fdisk 版本包含此功能。

僅供參考,這是一個壞主意,您可能會失去一切。如果您仍然想這樣做,請執行以下步驟:

  1. 要這樣做。如果這沒有幫助,那麼:
  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”選項的描述。

另請注意,一旦您進行了瘋狂的更改,您可能需要執行“同步”,以便在嘗試掛載分區之前重新讀取分區。

我只是以一種更簡單的方式做到了這一點:

# sfdisk -d /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 -f /dev/sdb < sdb.new

引用自:https://unix.stackexchange.com/questions/18752