パーティションを再パーティション化して、LINUXシステムを別のハードドライブに転送する

、遠く離れた銀河で 、Linuxシステムをあるハードドライブから別のハードドライブに移す必要がありました。私は所有者の恐怖を使いたくありませんでした。 他の検索エンジンの助けを借りてグーグル検索を行うと、Linux管理者がばかげているように見えるかもしれないという解決策を自分で見つけましたが、それは大いに役立ちました。



だからここにある。 キック、小片にカット。 会いましょう!







最初に行う必要があるのは、希望に応じて新しいハードドライブをパーティション分割し、場合によっては、以前のパーティションの間違いを排除することです(ソースディスクに問題がある場合)。



私のシステムの特定の例を見てみましょう。 HDD = 80GbからHDD = 20Gbにシステムを転送します。



80Gbドライブは次のようにマップされます。



/dev/hda1 — /boot (250 Mb)

/dev/hda2 — swap (1Gb)

/dev/hda3 — extended (20Gb) ( /dev/hda5, /dev/hda6, /dev/hda7, /dev/hda8)

/dev/hda5 — / (5Gb)

/dev/hda6 — /tmp (512Mb)

/dev/hda7 — /usr (10Gb)

/dev/hda8 — /var (5Gb)

/dev/hda4 — /home (54Gb)








/ homeは非常に情報に満ちているので、クローンには含めません。



期待どおりにジャンパーを設定することで、新しいHDDをシステムに接続します。 彼はhdbタグを取りました

便利なユーティリティでマークできます。 GPARTEDを使用する方が簡単でした -視覚的に理解しやすく、特定のパーティション上のデータが実際にどのくらいのスペースを占有しているかをすぐに確認できます。これは、スペースをそれほど(または小さい)割り当てる価値があるかどうかを判断するのに役立ちます。



次のように新しいディスク(/ dev / hdb)をパーティション分割しました。



/dev/hdb1 — /boot (250 Mb)

/dev/hdb2 — swap (1Gb)

/dev/hdb3 — extended (14Gb) ( /dev/hdb5, /dev/hdb6, /dev/hdb7, /dev/hdb8)

/dev/hdb5 — / (1Gb)

/dev/hdb6 — /tmp (512Mb)

/dev/hdb7 — /var (5Gb)

/dev/hdb8 — /usr (7Gb)

/dev/hdb4 — /home (4Gb)








次のステップは、新しいHDD上に作成されたすべてのパーティションを既存のシステムにマウントすることです。

これを行うために、既存のシステム上で、新しいHDDを分割したセクションに従って、サブディレクトリ/ boot、/ root、/ var、/ usr/ tmp-不要)を作成する/ backupディレクトリを作成しました。

次に、マウント自体を実行します。



sudo mount /dev/hdb1 /backup/boot

sudo mount /dev/hdb5 /backup/root

sudo mount /dev/hdb7 /backup/var

sudo mount /dev/hdb8 /backup/usr








そこで、データをコピーするための最も興味深い場所に到達しましたが、最も簡単な場所ではありませんでした。

Windowsとは異なり、Linuxでは自分自身を完全にコピーできます。 ただし、重要な点を1つ覚えておく必要があります。システムには、ディレクトリとファイルの属性と、シンボリックリンクとハードリンクがあります。 したがって、これらすべての接続が失われないようにシステムをコピーする必要があります。 このような手順には、専門家によると、tarコマンドが最適です。

ポイントは、ファイルをディスクにアーカイブしないことですが、いわゆる「パイプ」または「ストリーム」を介して受信HDDにファイルを転送します



転送手順を簡素化するために、 backup.shスクリプトを作成しました。



#!/bin/sh

cd /

tar -cf - dev initrd.img opt srv bin cdrom etc initrd lib sbin sys vmlinuz | (cd /backup/root; tar -xvpf -)

cd /boot

tar -cf - * | (cd /backup/boot; tar -xvpf -)

cd /var

tar -cf - * | (cd /backup/var; tar -xvpf -)

cd /usr

tar -cf - * (cd /backup/usr; tar -xvpf -)








内容を少し説明します。



「Cd /」

-ルートに移動



"Tar -cf-dev initrd.img opt srv bin cdrom etc initrd lib sbin sys | (cd / backup / root; tar -xvpf-)

»-リストされたディレクトリとファイルのtarを、受信HDDのtarに転送します。



転送する必要があるディレクトリとファイルを見つけるのは簡単です。 ls /コマンドを実行して、 /で始まるシステムリストを取得します。

私の場合、これは次のとおりです。



ls /

backup boot dev home initrd.img media opt root srv tmp var

bin cdrom etc initrd lib mnt proc sbin sys usr vmlinuz








このすべての「良い」から、 /に何があるかを強調する必要があります。

したがって、 / boot、/ var、/ tmp、/ usr、および/ homeの下のディスクで個別のパーティションを選択したため、このステップではスキップする必要があることがわかりました。 したがって、 dev initrd.img opt srv varのみを使用します

bin cdromなどinitrd lib sbin sys vmlinuz



そして、残りの方が簡単です:

cd /boot





-既存の/ブートに移動します



tar -cf - * | (cd /backup/boot; tar -xvpf -)





/ bootのすべての内容を/ backup / bootに転送します



など



したがって、 backup.shスクリプトを実行し、しばらく休息します。 約10分かかりました。



今、私は最初に注意を払わなかったもう一つの重要なポイント、私は余分な時間と頭痛を払った。



/ var、/ tmp、/ usrパーティションにデータを単純にコピーするだけでは不十分です。

すべての転送手順の後、これらのパーティションのマウントポイント(および転送中に除外したすべてのマウントポイント- / home、/ media、/ tmp、/ var、/ mnt、/ proc、として、受信ディスクにこれらのディレクトリを作成する必要があります。 / usr )同じ属性が必須です! それは:



sudo mkdir /backup/root/home

sudo mkdir /backup/root/media

sudo mkdir /backup/root/tmp

sudo mkdir /backup/root/var

sudo mkdir /backup/root/mnt

sudo mkdir /backup/root/proc

sudo mkdir /backup/root/usr








ディレクトリに設定する属性は、ソースシステムでls -la /コマンドを入力することで確認できます。 ただし、 / tmpのほかに、 ルートグループのルートの所有者と766の権限が必要です。 / tmpには、権利777を設定する必要があります。



ここで、必要に応じて、受信HDDのfstabを修正する必要があります(突然ディスク全体をパーティション分割した場合)。 また、GRUBブートローダーのmenu.lstを修正します。



UBUNTU、fstab、menu.lst、およびすべてのディスクは、 / dev / hdaだけでなくUUIDを介して登録されます。

コマンドls -l / dev / disk / by-uuidを使用して、ディスク上のUUIDを確認できます。出力は次のようになります。



lrwxrwxrwx 1ルートルート10 2008-02-17 17:45 11815c66-5ae7-4497-9039-51de9adef664-> ../../hda2

lrwxrwxrwx 1ルートルート10 2008-02-17 17:45 78711a48-6776-4474-8fa8-87016aad83a2-> ../../hda6

lrwxrwxrwx 1ルートルート10 2008-02-17 17:45 83fded3d-37c4-4d85-a965-a7bbe326178a-> ../../hda7

lrwxrwxrwx 1ルートルート10 2008-02-17 17:45 a60e482c-8260-48fb-a19e-f5f906d4d444-> ../../hda8

lrwxrwxrwx 1ルートルート10 2008-02-17 17:45 bc7607fe-3bf2-4bc1-adce-8ab749a271c9-> ../../hda1

lrwxrwxrwx 1ルートルート10 2008-02-17 17:45 cacd40ea-ac88-4143-b5d9-5cb477eeb85d-> ../../hda4

lrwxrwxrwx 1ルートルート10 2008-02-17 17:45 d4404ea9-0a8e-4a4c-b72d-10a5edd697be-> ../../hda5



ここでは、たとえば「 11815c66-5ae7-4497-9039-51de9adef664 」という数字だけが必要です。 これは、 スワップパーティションのUUIDです (私の場合)。



menu.lstで 、次の行を編集します。



# kopt=root=UUID=d4404ea9-0a8e-4a4c-b72d-10a5edd697be ro





(行がコメントアウトされていることを確認しないでください、カーネルを更新するとき、ここから情報が取得されます)



kernel /vmlinuz-2.6.22-14-generic root=UUID=d4404ea9-0a8e-4a4c-b72d-10a5edd697be ro quiet splash locale







そして



kernel /vmlinuz-2.6.22-14-generic root=UUID=d4404ea9-0a8e-4a4c-b72d-10a5edd697be ro single









システムがディスクにコピーされても、ブートローダーをインストールしなかったため、まだブート方法がわからないという事実を忘れないでください。

これは単純に行われます:

UBUNTUインストールディスクを取り出して起動します。

コンソールctrl + f1に移動します



sudo su

grub

find /grub/stage1

root (hd0,0)

setup (hd0) .

quit








それだけです-システムからドライブを切断し、接続し、確認してください。 すべてが私のために働いた。



脅威!



/ homeを転送しなかったため、システムはユーザーとしての私が存在するという事実を呪いましたが、ホームフォルダーはありません。 私はuserdel %username%



な方法で行動しましたuserdel %username%



、そしてadduser %username%







私は気にしませんでした。 そして、属性を整理するのが面倒です。 そして、システムは私のためにすべてをしました。



PSおそらく時代遅れの方法についてはあまりscらないでください。 (この瞬間は、この記事で言及したカーネルのバージョンによって計算できます)。



All Articles