Linux

如何將 ext4 文件系統從 /dev/sdb 移動到 /dev/sdb1?

  • December 13, 2018

不知何故,我在 /dev/sdb 中有一個 ext4 文件系統。我希望它是/dev/sdb1。

我可以手動安裝它;我可以訪問數據;我可以在 /etc/fstab 中引用它;等,但我希望它在標準分區中。

我不想失去數據,並且驅動器上沒有足夠的空間將其複製到另一個分區。這不是很多數據:我總是可以將其移至外部設備,修復 fs,然後將其移回,但現在我很好奇 :)

有沒有一種方法可以重新映射或將數據移動到 /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 vm 中使用 Debian Stretch。

對df的回應:

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

我明白,正如@MarkPlotnick 所說,因為我在虛擬機中,所以我可以相當輕鬆地做到這一點。但我想知道是否有基於cli的方法。謝謝!

可以在整個磁碟(而不是分區)上編寫 ext4(或任何其他)文件系統,但是這樣做當然意味著沒有分區表;您正在使用整個原始設備。

如果您從帶有分區表的磁碟開始**,**然後錯誤地(磁碟資訊仍在記憶體中)將其格式化為 ext4,覆蓋分區表(即使用mkfs.ext4 /dev/sdb而不是mkfs.ext4 /dev/sdb1),這是可能的。結果是一個沒有有效分區表的磁碟(它現在有一個 ext4 開始塊),但文件系統獨立儲存它的大小,所以它仍然可以工作(這也在一些外部磁碟上完成)。您可以像掛載分區一樣掛載該設備 - 只需使用sdb您會使用的位置即可sdb1

正如您可能想像的那樣,接下來的事情非常**危險。**您應該已經有備份,如果沒有,請立即獲取。另一方面,如果您沒有備份,則意味著您對該數據不是很感興趣(這些數據存在硬體故障、軟體故障或根據情況而定的咖啡灑出、管道爆裂的風險) ,入室盜竊和自然災害和非自然災害),因此,如果發生最壞的情況,仍然不會造成太大的惡作劇。

更新:如果您有空間,請備份,重新格式化並重新安裝。與移位方法的精確時間相同,但數據安全性提高了 100%。如果您隨後不刪除備份副本,您將免費獲得一個更新備份映像。

第一步:調整ext4 文件系統的大小,使其比整個磁碟柱面短。從分區表中獲取柱面大小hdparm,好吧,只是不存在(fdisk 會告訴你扇區的總數,而不是它們的組織方式)。在某些外部 USB 驅動程序上,您可能需要嘗試讀取磁碟製造商和型號,並使用它在 Internet 上搜尋資訊。SATA驅動程序應該沒問題。

現在您知道了多少,您可以調整文件系統的大小並將整個分區“向右”移動到磁碟的末尾,從而在開始時釋放一個柱面,這是分區表和開始空白空間的位置go(我不完全知道為什麼在 LBA 磁碟上 sdX1 應該在分區表之後啟動一個柱面或一個磁軌,但我從未發現值得嘗試)。

要移動分區,您可以使用非常危險的緩衝策略反向選項dd_rescue(我似乎看到了一些錯誤報告,其中說此選項不起作用)。

您可能想試驗一個較大的文件——比如 1 GB——看看這兩個選項是否有效;移動內容,使其在文件內從開頭移動 16 兆字節的數據,使文件大小保持不變;然後檢查內容以驗證這是發生了什麼。之後,使用/dev/sdb和適當的偏移量重複。

之後,fdisk用於重新創建分區表。

祝你好運!

引用自:https://unix.stackexchange.com/questions/423981