在命令行中调整 fat32 分区的大小而不会丢失数据

Ren*_*jam 5 partitioning parted

我正在尝试在我的 linux 机器中调整一个胖 32 分区的大小。以下是系统的规格。

  1. 这不是 PC,因此基于 UI 的工具不适用。
  2. 我试图调整大小的这个内存分区已经有文件形式的数据。我不能失去他们。
  3. 我试图将分区缩小到单独使用的空间并将剩余空间移动到另一个分区。
  4. 最好不重启系统,卸载分区就可以了。

编辑:从这个分区备份数据不是我想要的。我想看看是否有一种方法可以在不丢失数据的情况下尝试。它更像是分析而不是任务。

到目前为止我尝试过的:尝试使用 parted 工具,因为 gparted 需要一个 UI。尽管我能够缩小这个分区,但由于文件碎片,它会导致不必要的问题。例如,当我运行文件系统检查时缩小后,我收到了一些错误,比如没有找到几个文件的链。

我不能使用像 resizee2fs 这样的工具,因为它只支持 ext 文件系统(如果我在这里错了,请纠正我)。

我尝试使用工具 fatresize,尽管我能够成功地将它安装在我的 debian 中,但我无法获得 arm 的可安装程序,无论我获得什么链接,都会在第 1 行语句本身上引发错误。

有人可以帮我提供他们能提供的任何信息吗?

yur*_*hen 5

fat32部分调整大小

\n

注意:首先,请备份您的数据,以防万一。

\n

将 sda1 大小从 28G 调整为 10GB 的测试。

\n

0. 原始尺寸

\n

//检查分区大小

\n
ubuntu$ sudo mount /dev/sda1  /media/chen/test\n\nubuntu$ lsblk /dev/sda\nNAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT\nsda      8:0    1 28.9G  0 disk \n\xe2\x94\x94\xe2\x94\x80sda1   8:1    1 28.9G  0 part /media/chen/test\n
Run Code Online (Sandbox Code Playgroud)\n

//检查文件系统大小

\n
sudo fatresize -i /dev/sdXX\n
Run Code Online (Sandbox Code Playgroud)\n

1.更改fs:fatresize

\n
ubuntu$ sudo fatresize /dev/sda1 -s 10G -p -v\nfatresize 1.0.2 (06/16/18)\n.Error: Partition /dev/sda1 is being used.  You must unmount it before you modify it with Parted.\n\nubuntu$ sudo umount /dev/sda1\n\n\nubuntu$ sudo fatresize /dev/sda1 -s 10240M -p -v\nfatresize 1.0.2 (06/16/18)\n.FAT: fat32\nSize: 30985420800\nMin size: 2483422208\nMax size: 30989615104\n
Run Code Online (Sandbox Code Playgroud)\n

笔记

\n

// gparted 似乎不会改变 fs 大小,如果没有这一步,将会得到一个损坏的 fs,说:fs 比体积大:

\n
ubuntu$ sudo dosfsck /dev/sda1\nfsck.fat 4.1 (2017-01-24)\nSeek to 30985420288:Invalid argument\n\nubuntu$ sudo fatresize /dev/sda1 -s 9G -p -v\nfatresize 1.0.2 (06/16/18)\n.Error: The file system is bigger than its volume!\n
Run Code Online (Sandbox Code Playgroud)\n

2.更改分区:gparted或partx

\n

在 gparted GUI 中调整 sda1 部分大小\n//partx cli 也可以执行此操作。

\n
ubuntu$ lsblk /dev/sda\nNAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT\nsda      8:0    1 28.9G  0 disk \n\xe2\x94\x94\xe2\x94\x80sda1   8:1    1   10G  0 part \n\nubuntu$ sudo blkid /dev/sda*\n/dev/sda: PTUUID="d45b4904" PTTYPE="dos"\n/dev/sda1: UUID="0403-0201" TYPE="vfat" PARTUUID="d45b4904-01"\n
Run Code Online (Sandbox Code Playgroud)\n

3.检查结果

\n
ubuntu$ sudo mount /dev/sda1  /media/chen/test\n\nubuntu$ df -h /media/chen/test\nFilesystem      Size  Used Avail Use% Mounted on\n/dev/sda1        10G  2.4G  7.7G  24% /media/chen/test\n\nubuntu$ sudo dosfsck /dev/sda1\n...\n
Run Code Online (Sandbox Code Playgroud)\n
\n

更新1:

\n

看来 gparted 会在步骤 1 中调整 fat fs 的大小。
\n// 但如果安装了 fs,它可能会失败,但不会挂起

\n

这是正常的日志和结果:

\n

gparted_resize_fat.png

\n


Pan*_*her 3

好吧,首先,如果您“已经拥有文件形式的数据。我不能丢失它们”,那么您的第一步就是在执行其他操作之前备份它们。

调整大小和移动分区通常不会导致数据丢失,如果其他方法都失败,您几乎总是可以使用 photorec 来恢复文件 - http://www.cgsecurity.org/wiki/PhotoRec - 这样做很痛苦。

其次,您无法调整或移动正在使用的分区的大小。这是人们建议您通过实时 USB 进行这些操作的主要原因。

因此,无论如何,如果不启动到实时 USB,您就无法移动或调整根分区的大小(添加到 LVM 是一个例外)。

只要相关分区未使用(即未安装),您就可以移动它们并调整其大小:

请参阅如何在服务器上使用命令行调整分区大小而不使用 GUI?

否则,您的问题可能会因以下原因而被关闭:

  1. 您正在运行 Debian

  2. 缺乏信息 - 您没有发布您的分区方案,告诉我们您想要移动什么,安装了哪些分区,以及您收到什么命令和错误消息。


sud*_*dus 1

你最好将数据以文件的形式复制到一个安全的地方(如果你愿意的话,可以称之为备份),但在这种情况下也是一个临时位置,因为我认为你必须接受你不能用linux缩小FAT文件系统工具。您也许可以使用 Windows 工具来完成此操作(FAT32 是 Microsoft 文件系统。)

因此,当您将文件形式的数据复制到安全的地方后,您可以

  • 从另一个驱动器启动并卸载该驱动器中您想要更改的所有分区

  • 编辑分区(最简单的方法是删除 FAT32 分区并创建一个具有所需大小的新分区。

  • 在新分区中创建FAT32文件系统

  • 对分区表进行其他修改...

  • 将文件从安全位置复制到新的 FAT32 分区。