ext4ファイルシステムを/dev/sdbから/dev/sdb1に移動するには?

ext4ファイルシステムを/dev/sdbから/dev/sdb1に移動するには?

とにかく、/dev/sdbにext4ファイルシステムがあります。私はそれが/ dev / sdb1であると予想しました。

手動でマウントしたり、データにアクセスしたり、/ etc / fstabなどで参照したりできますが、標準パーティションに入れたいです。

データを失いたくないので、ドライブに別のパーティションにコピーするスペースがありません。データはあまりありません。いつでも外部デバイスに移動し、ファイルシステムを回復し、再び移動することができましたが、今は不思議です:)

データを/dev/sdb1(まだ存在しない)に再マップまたは移動する方法はありますか?

fdiskは以下を提供します:

$ sudo fdisk /dev/sdb1
fdisk: cannot open /dev/sdb1: No such file or directory

$ sudo fdisk /dev/sdb
Device /dev/sdb already contains a ext4 signature.
The signature will be removed by a write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x4096cdf8.

Command (m for help): p
Disk /dev/sdb: 200GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4096cdf8

はい、非常に小さなドライブです! VirtualBox仮想マシンでDebian Stretchを使用しています。

dfに返信する:

$ df -h
Filesystem Size  Used  Avail  Use%  Mounted on
/dev/sdb   196G  116G   71G    63%  /media/mymountdir

@MarkPlotnickが言ったように、仮想マシンにいるので、これはかなり簡単にできることを知っています。しかし、cliベースの方法があるかどうかを知りたいです。ありがとうございます!

答え1

あなたできるディスク全体(パーティションではない)にext4(または他の)ファイルシステムを作成します。しかし、これは、RAWデバイス全体を使用するパーティションテーブルがないことを意味します。

ディスクから起動する場合は可能です。そしてパーティションテーブルを作成し、誤って(ディスク情報がまだメモリ内にある場合)、ext4でフォーマットしてパーティションテーブルを上書きします(代わりにmkfs.ext4 /dev/sdb使用mkfs.ext4 /dev/sdb1)。その結果、ディスクには有効なパーティションテーブルはありませんが(今はext4起動ブロックがあります)、ファイルシステムはサイズを独立して保存するため、まだ動作します(一部の外部ディスクでも実行されます)。デバイスをパーティションのようにマウントするだけです。sdb他の方法で使用していた場所で使用してくださいsdb1

次は危険あなたが想像できるように。すでにバックアップが必要です。そうでない場合は、バックアップを取得してください。。一方、バックアップがない場合は、そのデータにあまり興味がないことを意味します(ハードウェアエラー、ソフトウェアエラー、または場合によってはコーヒーを注いだり、パイプが爆発する危険性があります)。 、盗難、自然災害、不自然災害)なので、最悪の状況が発生しても大きな害はありません。

修正する:あなたが無料ならバックアップする、再フォーマットして再インストールしてください。シフト作業と正確なタイミングは同じですが、データセキュリティは100%向上します。バックアップコピーを削除しないと、更新されたバックアップイメージを無料で入手できます。

最初のステップ:サイズ変更ext4ファイルシステムを使用してディスクシリンダ全体を短縮します。パーティションテーブルからシリンダサイズを取得するhdparmことはありません(fdiskはセクタの設定方法ではなく、セクタの総数を知らせます)。一部の外部USBドライバでは、ディスクメーカーとモデルを読み、それを使用してインターネットから情報を取得する必要があります。 SATAドライバは大丈夫でしょう。

これでいくらか分かったので、ファイルシステムのサイズを変更し、パーティション全体をディスクの最後に「右」に移動して、最初にパーティションテーブルと開始空き領域を持つシリンダを解放できます(私はあまり明確ではありません。なぜLBAディスクでは、sdX1はパーティションテーブルの後にシリンダ(またはトラック)を起動する必要がありますが、試してみる価値があることを見たことはありません。

パーティションを移動するには、非常に危険な方法を使用できます。バッファ戦略またはキャンセルオプションdd_rescue(このオプションが機能しないというバグレポートを見たようです)。

より大きなファイル(1 GBなど)を試して、両方のオプションのいずれかが機能していることを確認し、ファイルサイズが同じになるようにデータをファイルの先頭から16 MB移動するようにコンテンツを移動できます。これが起こっていることを確認してください。その後、/dev/sdb適切なオフセットを使用して繰り返します。

次に、をfdisk使用してパーティションテーブルを再作成します。

頑張ってください!

答え2

ご覧のように、実際のブロックデバイスにファイルシステムを作成すると、fdiskそのファイルシステムはデータが別の場所に移動されるまで友達になりません。ファイルシステムをマウントし、データをコピーしてからマウント解除する必要があります。その後、fdiskブロックデバイスを正しい方法で分割し、mkfsパーティションで使用し、マウントし、データを再移動できます。

$ sudo -s
# mkdir -p /mnt/export
# mount /dev/sdb /mnt/export
# exit
$ rsync -a /mnt/export/ /path/to/backup/
$ sudo -s
# umount /mnt/export
# fdisk /dev/sdb  # create your partitions
# mount /dev/sdb1 /mnt/export
# exit
$ rsync -za /path/to/backup/ /mnt/export/

答え3

すでに持っている構成は、仮想マシンには適していません。これにより、システムにさらに多くのディスクを追加できます。

パーティション化されたテーブルがある場合は、次のアプローチを検討してください。

  • 管理者は仮想マシンのディスク割り当てを増やします。
  • 仮想ディスクを再スキャンするか、仮想マシンを再起動します。
  • パーティションエントリを削除し、大きなサイズで再作成します。
  • ファイルシステムのサイズを変更します。

ファイルシステムがパーティションテーブルなしでディスクに直接配置されている場合は、退屈な3番目のステップは省略できます。

関連情報