パーティションの番号をsda1からsda2に変更します


20

sda1とsda2の2つのパーティションを持つディスクがあります。sda1の数をsda2に、sda2をsda1に変更します。

それは可能ですが、手順を覚えていません。すなわち、私の最初のパーティションはsda2と2番目のsda1になるので、fdisk-> x-> fのような自動順序ではなく、手動順序を指定する必要があります。

順序を変更するにはどうすればよいですか?マニュアルまたはチュートリアルへのリンクも役立ちます。

ありがとう。

理由:sda1からデータを読み取る必要があるアプリケーションがありますが、データはsda2にあります。パーティションテーブルの変更は、この問題のより高速なソリューションです。システムは重要ではありませんが、システムを長時間停止させたくありません。

更新:OpenBSDのfdiskバージョンには、その機能が含まれています。


1
一般的に、あなたが求めることをするのは悪い考えなのでそれが欲しい理由を説明してください。
rozcietrzewiacz

私はバックアップを持っています、心配しないでください:)
ルーフォエルマグーフォ

さて

回答:


17

参考までに、それは悪い考えであり、すべてを失う可能性があります。それでもやりたい場合は、次の手順を実行します。

  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」オプションの説明と説明を参照してください。

また、クレイジーな変更を行った後は、マウントしようとする前にパーティションが再読み取りされるように 'sync'を実行する必要があるかもしれないことに注意してください。


答えてくれてありがとう。あなたは正しい、これは怖いです:)。
ルーフォエルマグーフォ

素晴らしい悪。数字が同じでない場合はどうなりますか?あきらめて再分割しますか?(それは私がやったこと)
-supervacuo

1
@supervacuo Testiskは、あなたを助けるかもしれません。testdiskディストリビューションのソフトウェアデータベースでパッケージを検索します。
rozcietrzewiacz

@supervacuo番号が同じでない場合、新しいパーティションは古いパーティションと同じ場所にないため、破損する可能性があります。ディスクに対して他に何もしない場合は、開始する前にバックアップしたパーティションテーブルを復元して、再試行できます。そうでない場合は、正しい数値がコンソールのどこかに残っているか、パーティションの正確なサイズと場所を覚えて、数値を計算できることを願っています。
マイケルジョンソン

31

私はこれをもっと簡単な方法でした:

# 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

を使用してディスクの先頭に2つの小さなパーティションを追加するために、唯一のパーティション(sdb1)を縮小して右にシフトした後、番号付けシーケンスが壊れましたgparted

私の場合のように、最後のコマンドが機能しない場合は、次のように変更します。

# sfdisk --no-reread -f /dev/sdb < sdb.new

これは私のために働き、私はその2番目のコマンドを必要とすることになりませんでした。
アーロンフランケ

私にも感謝します;)...コマンドの前にすべてのパーティションがアンマウントされていることを確認してください
-intika

3

ドライブパーティションテーブルを書き換えて順序を逆にする必要がありますが、これは少し危険です。私があなただったら、デバイス名の順序を入れ替えてパーティションをそのままにしておきたいという問題を解決するでしょう。

たとえば、両方のマシンで実行する必要があるスクリプトがあり、同じデバイスにアクセスする場合、両方のサーバーで同じ名前であるが/へのリンクである別のディレクトリ(/ devではない)にリンクを作成します一方のdev / sda1と、他方の/ dev / sda2。

任意のパーティションエディター(fdiskまたはcfdisk)を使用してパーティションを編集できますが、現在の設定を書き留めるか、画面の写真を撮る必要があります。2つのパーティションを削除してから、すべての正しい値を指定して手動で作成します。これを行うには、LiveCDでシステムを起動します。


何も変更できません。私のシステムはXen DomUであり、問​​題はDom0にあります。パーティションの順序を再作成できましたが、私の状況ではより複雑です。しかし、とにかく、順序を変更する方法を知りたいです。
ルーフォエルマグーフォ

2

まず最初に、この全体は、物事を壊すために最善を尽くすための練習ですが、とにかく、あなたが試すことができる別のアプローチがあります。

注:どこからブートするかは言及していませんでしたが、このソリューションは、私がこれを書いている時点では、LILOまたはGRUBを正常に動作させるために必要なことを扱っていません。

/dev/sda1そして/dev/sda2ブロックデバイス(8,1)と(8,2)です。を使用mknodして、単純に2つを交換してみてください。

telinit 1
(...)
rm -f /dev/sda{1,2}; mknod /dev/sda1 b 8 2; mknod /dev/sda2 b 8 1
chmod 640 /dev/sda{1,2}; chown root:disk /dev/sda{1,2}
reboot

このスワッピングは、含まれているパーティションが/dev/ブート時にロードされた後にのみ発生することを覚えておいてください。したがって、initrdそこに修正しない限り、「正しい」ものが残ります(読者のための運動- mkinitrd奇妙さをコピーしますか?)これもそうではありませんSELinuxコンテキストに対処します。


ブートローダーは問題ではありません:)。ソリューションに感謝しますが、システムではなくパーティションテーブルの順序を変更する必要があります。
ルーフォエルマグフォ

1
これは、udevを使用するシステムでは機能しません。アプリケーションが/dev/sda(ディスクを直接読み取るのではなく)というファイルから読み取る場合にのみ役立ちます。
ジル「SO-悪であるのをやめる」

両方-同意しました。私見全体の問題は痛みの運動です。私はそのことについて確信がありませんでしたudev。どうやら私が始めた最初のシステムにsshはそれがなかったようだ。
アーロンD.マラスコ

2

この問題に対する驚くほど簡単な解決策を発見しました。という名前のパーティションが1つだけ残っているとし/dev/sda3ます。あなたはそれが呼ばれることを望み/dev/sda1ます。開いてgdisk、パーティションテーブルをGPTに変換し、書き込み、終了します。次にもう一度開き、sortを押して(GPT番号を1に変更します)、エキスパートオプションを使用してGPTをMBRに戻します。


1

-ターミナルの/ dev / sda3から/ dev / sda2へのパーティションをルートとして編集-

  1. バックアップパーティションテーブル

    sfdisk -d / dev / sda> sda.bkp

  2. パーティションテーブルのバックアップを新しいパーティションテーブルにコピーする

    cp sda.bkp sda.new

  3. 新しいパーティションテーブルを編集する

    gedit sda.new

ここに画像の説明を入力してください

保存して閉じる

  1. 新しいパーティションテーブルを再インストールする

    sfdisk --no-reread -f / dev / sda <sda.new

  2. コンピューターを再起動する


これは実行可能ですが、GParted LiveCD
eyoung100を

1
モノスペース以外のフォント、目に見える挿入ポイント、目に見えるスペルチェッカーエラーを使用したテキストエディターのスクリーンショットよりも、より良い結果が得られると思います。
マイケルジョンソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.