如何在 Linux 中临时提取闪存驱动器或 HDD?

如何在 Linux 中临时提取闪存驱动器或 HDD?

假设我用这种方式挂载了一个磁盘:

mount /dev/sdb /mnt/tmp

我在此文件系统上打开了一些文件,但不想卸载它。但是我想暂时提取该设备,然后再重新连接。我希望对此文件系统的所有读取和写入仅在缓存中执行,或者挂起直到我重新连接设备。

如果我考虑提前暂时分离,我会使用设备映射器:

# ls -lh /dev/sdb
brw-rw---- 1 root floppy 8, 16 Sep 12 17:38 /dev/sdb
# blockdev --getsize /dev/sdb
2211840
# dmsetup create sdb_detachable --table '0 2211840 linear 8:16 0'
# mount /dev/mapper/sdb_detachable /mnt/tmp
(start working with the filesystem)
(suddenly need to detach the device)
# dmsetup suspend sdb_detachable
# dmsetup load sdb_detachable --table '0 2211840 error'
# blockdev --flushbufs /dev/sdb
(eject the device)
(maybe even use the cached part of the filesystem)
(reattach the device, now it appears as /dev/sdc)
# ls -lh /dev/sdc && blockdev --getsize /dev/sdc
brw-rw---- 1 root floppy 8, 32 Sep 12 17:51 /dev/sdc
2211840
# dmsetup load sdb_detachable --table '0 2211840 linear 8:32 0'
# dmsetup resume sdb_detachable
(filesystem is usable again)
(finished using it, now need to clean up)
# umount /mnt/tmp/
# dmsetup remove sdb_detachable
# eject /dev/sdc

如果直接安装设备如何实现?我可以将它“窃取”到设备映射器中吗?

答案1

嗯,那很酷。我不知道dmsetup能做到这一点。 :)

我唯一的答案是挂起/休眠机器,拔出闪存驱动器并在其他地方进行操作,然后在恢复系统之前将闪存驱动器放回原位。

不幸的是,执行此类操作可能会损坏设备上的文件系统。 也许如果您所做的只是从中读取(并且没有在设备上的任何位置写入任何块),则这可以工作。

然而,大多数闪存设备都有重写迭代限制,因此(在某些设备中)固件可能会在发生写入时移动内容,即使写入包含完全相同的数据。这意味着将设备带回第一个系统可能会损坏文件系统。

不过,有趣的问题。 :)

相关内容