パーティションを再パーティション化して、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らないでください。 (この瞬間は、この記事で言及したカーネルのバージョンによって計算できます)。

Source: https://habr.com/ru/post/J128095/


All Articles