web-dev-qa-db-ja.com

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

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

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

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

ありがとう。

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

アップデート:OpenBSDのfdiskバージョンには、この機能が含まれています。

22
Rufo El Magufo

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

  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 :

ここでcheck Enterを押した後に印刷される数値がexactlyである場合、以前にsda2について印刷されたものと同じです。よろしければ、sda2の新しい番号を続けてください:

    /dev/sda2 :0
    /dev/sda2          0+      5       6-     23063+  83  Linux
    /dev/sda3 :

今回は「0」を入力するだけで十分でした。ただし、数字が台無しになっていないことを確認する必要があります。

次に、同じ方法で他のパーティションを続行します。すでにディスクの終わりに達している場合は、Enterキーを押すだけで十分です。最後に、すべての数値に問題がないことを再度確認し、パーティションテーブルを保存します(または保存しません)。あなたが何かを台無しにした場合は、man sfdiskおよび「-d」、「-O」、「-I」オプションの説明。

また、クレイジーな変更を行ったら、パーティションをマウントする前にパーティションを再度読み取るために、「同期」を実行する必要があるかもしれません。

18
rozcietrzewiacz

私はこれをもっと簡単な方法でやっただけです:

# 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

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

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

# sfdisk --no-reread -f /dev/sdb < sdb.new
34
Joao S Veiga

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

3
user1980127

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

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

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

3
Michael Dillon

既存のソリューションはすべて非常に安全に見えますが、結果として非常に複雑になります。

allパーティションを並べ替えて、順番に並べたかった。

より経験があり、重要でないデータまたはバックアップされたデータがあり、結果として問題を修正したい場合は、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
3
SharpC

まず、これはすべて、最善を尽くして物事を壊そうとする練習ですが、とにかく、ここで別の方法を試すことができます。

注:どこからブートするか、そしてこの解決策については言及していませんでしたが、私がこれを書いている時点では、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コンテキストには対応していません。

2

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

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

    sfdisk -d/dev/sda> sda.bkp

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

    cp sda.bkp sda.new

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

    gedit sda.new

enter image description here

保存して閉じる

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

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

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

0
user264681