Sda1とsda2の2つのパーティションを持つディスクがあります。 sda1の数をsda2に、sda2の数をsda1に変更したいと思います。
それは可能ですが、手順を覚えていません。つまり、最初のパーティションはsda2で2番目のパーティションはsda1になるので、fdisk-> x-> fのように自動順序付けではなく、手動順序を指定する必要があります。
順序を変更するにはどうすればよいですか?マニュアルやチュートリアルへのリンクも歓迎します。
ありがとう。
理由:sda1からデータを読み取る必要があるアプリケーションがありますが、データはsda2にあります。パーティションテーブルの変更は、この問題の最も早い修正です。システムは重要ではありませんが、あまり長時間システムを停止したままにしたくありません。
アップデート:OpenBSDのfdiskバージョンには、この機能が含まれています。
参考までに、それは悪い考えですそしてあなたはすべてを失う可能性があります。それでもやりたい場合は、次の手順に従います。
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」オプションの説明。
また、クレイジーな変更を行ったら、パーティションをマウントする前にパーティションを再度読み取るために、「同期」を実行する必要があるかもしれません。
私はこれをもっと簡単な方法でやっただけです:
# 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
私はこの問題の驚くほど簡単な解決策を見つけました。 /dev/sda3
という名前のパーティションが1つだけ残っているとします。 /dev/sda1
と呼ばれるようにしたい。 gdisk
を開き、パーティションテーブルをGPTに変換して、書き込み、終了します。次にもう一度開き、並べ替えを押します(これによりGPT番号が1に変更されます)。次に、エキスパートオプションを使用してGPTをMBRに変換します。
ドライブパーティションテーブルを書き換えて順序を逆にする必要がありますが、これは少し危険です。もし私があなただったら、デバイス名の順序を入れ替えてパーティションをそのままにしておきたいという問題を修正します。
たとえば、両方のマシンで実行する必要のあるスクリプトがあり、同じデバイスにアクセスする場合は、両方のサーバーで同じ名前であるが/へのリンクである別のディレクトリ(/ devではない)にリンクを作成します。一方にはdev/sda1、もう一方には/ dev/sda2。
任意のパーティションエディター(fdisk
またはcfdisk
)を使用してパーティションを編集できますが、現在の設定を書き留めるか、画面の写真を撮る必要があります。 2つのパーティションを削除し、すべての正しい値を指定して手動で作成します。これを行うには、LiveCDでシステムを起動します。
既存のソリューションはすべて非常に安全に見えますが、結果として非常に複雑になります。
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
まず、これはすべて、最善を尽くして物事を壊そうとする練習ですが、とにかく、ここで別の方法を試すことができます。
注:どこからブートするか、そしてこの解決策については言及していませんでしたが、私がこれを書いている時点では、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コンテキストには対応していません。
バックアップパーティションテーブル
sfdisk -d/dev/sda> sda.bkp
パーティションテーブルのバックアップを新しいパーティションテーブルにコピーする
cp sda.bkp sda.new
新しいパーティションテーブルを編集する
gedit sda.new
保存して閉じる
新しいパーティションテーブルを再インストールする
sfdisk --no-reread -f/dev/sda <sda.new
コンピュータを再起動します