首先,我使用的是 Linux,我在其中一个 USB 上发现了一些非常有趣的东西。很久以前,我在 USB 上创建了一个新的分区表,都是 FAT32,每个 8GB(总共 16GB)- 在其中一个上安装了一个 Linux ISO,并使用另一个进行存储。
于是有一天我把它清理干净,换了一种格式,然后试着往里面写入文件。据说它可以处理大约 15.2 GB,听起来不错。
尝试将大约 14GB 的数据移动到其中,但写入时出现问题 —— 总是说空间不足,尽管 USB 说还有更多空间。
因此,我的程序员本能当然开始发挥作用,我重新安装了 USB,并开始粘贴一些快速的 Python 来尝试找到我正在处理的分区大小。
from collections import namedtuple
def disk_usage(path):
"""Return disk usage statistics about the given path.
Returned valus is a named tuple with attributes 'total', 'used' and
'free', which are the amount of total, used and free space, in bytes.
"""
st = statvfs(path)
free = st.f_bavail * st.f_frsize
total = st.f_blocks * st.f_frsize
used = (st.f_blocks - st.f_bfree) * st.f_frsize
return namedtuple('usage', 'total used free')(total, used, free)
(在 stack overflow 上发现)
令人惊讶的是——我正在处理 8GB 的数据,然后我想我有了自行sdb1
安装的想法。sdb
猜猜我发现了什么。
我找到了 Linux 的只读解压 ISO,其中的所有文件仍在那里。
出于本能,我尝试了rm -rf *
,然后使用sudo
。都没有成功,所以我尝试使用 切换所有权chown
,成功了。然后我尝试使用 授予新的读写权限,但失败了chmod
。甚至尝试重新格式化驱动器,当然它重新格式化了 - 但文件仍然在那里。所以我有几个问题,希望我们都能找到答案,
1)如何逆转影响并将 USB 恢复到其完整的 16/15GB 到一个分区?
2) 如果该过程可以再次执行--这个“只读”系统可以执行吗?
3)既然分区表应该被覆盖,那么这些文件为什么还在那里?
答案1
您的问题在某些关键细节上没有 100% 清楚;但是,您应该知道,对磁盘进行分区和创建新的文件系统(“格式化”磁盘)都会留下最多磁盘上的数据完好无损,只是“不受任何方式的束缚”访问单个文件。如果您逐个扇区搜索磁盘,则可以恢复磁盘重新分区或文件系统创建操作之前的旧文件。像相簿依靠这一事实来恢复旧文件。这适用于传统的旋转磁盘介质和电子介质(USB 闪存驱动器和 SSD),但如果您在 SSD 上启用 TRIM 功能,SSD 可能会重新映射和擦除扇区,这会使数据恢复更加困难。
根据所涉及的分区表类型(MBR、GPT 或大多数 Linux 发行版安装程序使用的 Frankenstein 怪物混合格式.iso
)、所涉及的文件系统以及写入磁盘的其他内容,您可以轻松看到足够多的旧文件系统以便能够挂载它;但是,旧文件系统上的某些数据可能会被销毁。
我的怀疑是您的 USB 驱动器完好无损,您只是保留了原始分区表(将磁盘分成两个相等的部分)。您可以使用您喜欢的任何分区软件检查和更改分区表——通常是 GParted、、,parted
或者fdisk
在gdisk
大多数 Linux 发行版中,尽管也有其他软件。由于您没有显示任何这些工具的输出,我无法确定磁盘的当前状态。
答案2
所以我对所有的问题都不确定,但这是我自己能做出的最佳回答。
- 首先,为了扭转这种影响,只需运行
dd if=/dev/zero of=sdX
- 其次...不知道为什么会发生这种情况。
- 第三,是的,它仍然可以从 MBR 执行。
使用以下命令重新格式化分区表对清除 sdX 上的文件没有影响
dd if=/dev/zero of=/dev/sdX bs=512 count=1
parted /dev/sdX mktable msdos
parted /dev/sdX mkpart primary partition_type 1 100%
wipefs -a /dev/sdX --force