GNU / Linuxでパーティションを移動する方法は?


17

パーティションをディスクの先頭に少し移動する方法は?Partedは何らかの理由でファイルシステムを必要としています(理由はわかりません)、すべてのセクターを左にシフトしたいだけです...

r@l:15:32:45:~# parted /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: HGST HTS 541010A9E680 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  32.2GB  32.2GB  primary  fat32
 2      32.2GB  37.6GB  5360MB  primary
 3      37.6GB  1000GB  963GB   primary

(parted) move 3                                                           
WARNING: you are attempting to use parted to operate on (move) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Error: Could not detect file system.   

FSなしでパーティションを使用していますか?FSを誰にでも設定してからfdisk移動するだけです。
ピーター

したがって、実際にはLUKSコンテナです。しかし、パーティションムーバーがファイルシステムの内部を見ることはないと思います。
Vi。

gparted似たような状況で私のためにうまくやった。
palacsint

おそらく最終的に彼らはこれを実装しましたか?
Vi。

1
Parted Vesion 3.2には、オプションとして「移動」はありません。
レンネ

回答:



15

ddとfdiskを使用した手動の方法:

# fdisk -l /dev/sdb | grep sdb3
/dev/sdb3        73402368  1953525167   940061400   83  Linux

# fdisk /dev/sdb
Command (m for help): d
Partition number (1-4): 3
Command (m for help): n
Partition number (1-4, default 3): 3
First sector (73385984-1953525167, default 73385984): 
Using default value 73385984
Last sector, +sectors or +size{K,M,G} (73385984-1953525167, default 1953525167): 
Using default value 1953525167
Command (m for help): w
The partition table has been altered!

# fdisk -l /dev/sdb | grep sdb3
/dev/sdb3        73385984  1953525167   940069592   83  Linux

# dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3 count=100 skip=$((73402368-73385984)) seek=0 2> /dev/null | file -s -
/dev/stdin: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: af1c47f0-4ca5-4ea7-a091-065bd263653f

# dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((73402368-73385984)) seek=0 of=/dev/sdb3

# file -s /dev/sdb3
/dev/sdb3: sticky LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: af1c47f0-4ca5-4ea7-a091-065bd263653f

約2時間待っています。(18hのように見える...)

注:これは、データを前方に移動するのではなく、後方に移動するだけです。

一時停止:

# pidof dd
907
# kill -STOP 907
# cat /proc/907/fdinfo/1
pos:    586921398272
flags:  0100001

# kill -9 907

remember 586921398272/512 = 1146330856

再開中:

dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3

2
命の恩人!誰かが(速度の理由で)より大きなbs値を使用しようとしましたか?
デビッドバラジック

他のbsサイズの場合、値を適切に再計算したことを確認してください。
Vi。

3
どうしてdd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3?この方法で、新しいsdb3内ではなく古いsdb3の開始でも動作するはずです
-solsTiCe

@solsTiCe、あなたのコマンドと私のコマンドの違いは何ですか?
Vi。

3
しかし、大きなbsはそれだけでは助けにはなりませんbs=1M iflag=direct oflag=directでした。SSDで40 MB / sから400 MB / sになりました。また、使用status=progress
アレクサンドルドゥビンスキー

3

いつでも使用できますdd

  • liveCD(またはパーティションがマウントされていないことを確認する他の方法)から起動します
  • dd if=/dev/sdc2 of=somefile bs=1M ファイルにパーティションのコピーを作成します。
  • fdisk(または好きなもの)でパーティションを削除します
  • fdisk(または好きなもの)を使用して、目的の場所にパーティションを作成します。
  • dd of=/dev/sdc2 if=somefile bs=1M ファイルから内容を復元します。

その場でそれを行う方法?このパーティションは、自宅の他のすべてのHDDをまとめたサイズとほぼ同じです。
Vi。

次のようなことはできますdd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=Mか?
Vi。

トムができるかもしれませんが、最初にテストしてください。特に パーティション上のデータのバックアップがない場合。(バックアップがある場合は、もっと簡単なソリューションがあることに注意してください)。
ヘネス

3
@Vi。回答のこの正しい最初の応答は、この「所定の場所で行う」要件が質問のどこにも存在しないため、誰も下票に値しません。
zero2cx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.