使用 Linux 区域,因为我使用 Linux 应用程序和实用程序。
我的手机崩溃了(好几次)并且损坏了我的 microSD 卡。它似乎不再有分区,并且显示为 32MB 而不是 2GB。那就是使用testdisk. dd并且ddrescue仅从中提取了 30.6MB 的空值。
它是正品 SanDisk 品牌,从信誉良好的零售商处购买,该空间已经完美运行一年了。
我希望它已经有了,但我不认为询问有什么坏处。即使我忘记了我想要的几个文件,格式化也可能会给我留下一张相当无用的 32MB 卡。
如果有人有任何至少修复该卡的方法,将不胜感激。
通过 df 查看设备名称,是否可以通过某种方式将其解析为物理驱动器名称,例如供应商/类型。
/dev/sda3 915.4G 34.9G 880.0G 4% /share/HDA_DATA
/dev/sdd3 1.8T 668.1G 1.1T 36% /share/HDD_DATA
Run Code Online (Sandbox Code Playgroud)
我了解到我在sys/block中找到了一些信息,但我没有在那里找到供应商的类型名称?
- 添加 -
我的系统是基于 Linux 的 QNAP NAS,因此情况可能会略有不同。
-- 根据史蒂文的回答添加 --
[~] # hdparm -I /dev/sdb3
/dev/sdb3:
HDIO_DRIVE_CMD(identify) failed: Invalid argument
Run Code Online (Sandbox Code Playgroud) 我得到了新的 SD 卡,声称具有 10 级速度,但测试后 Linux 中的内部磁盘实用程序仅显示 6 级速度。如何检查读卡器速度以确保不是设备的限制,而是卡的限制?
我没有任何经过批准的 SD 卡来执行测试。
我的读卡器在 lspci 中显示如下:
0000:07:00.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 05)
0000:07:00.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 22)
0000:07:00.2 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 12)
0000:07:00.3 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 12)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用xdelta3远程块设备与本地块设备同步。我可以xdelta3使用以下命令轻松生成补丁文件:
xdelta3 -e -B 33554432 -v -9 -I 0 -s /dev/loop5p2 /dev/loop4p2 patch.xd3
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用以下命令在远程系统上解码时:
xdelta3 -v -d -B 33554432 -s /dev/sda2 patch.xd3 /dev/sda3
Run Code Online (Sandbox Code Playgroud)
...我收到以下错误:
xdelta3: non-seekable source in decode: XD3_INTERNAL
Run Code Online (Sandbox Code Playgroud)
据我了解,这是由于没有足够大的缓冲区造成的。然而,我的-B论点等于补丁的创建者。事实上,我可以将这个尺寸加倍,但仍然行不通。
当通过 UUID 挂载硬盘并通过设备文件挂载另一个硬盘时,我如何确保第一个始终是 /dev/sdaX ,第二个是 /dev/sdbX ,而不是相反?
对我想做的事情的一些解释:我正在将树莓派零、USB 集线器、外部硬盘驱动器和 SD 卡(全部由移动电源供电)连接在一起。然后,当我打开树莓派电源时,它应该会自动在外部硬盘驱动器上备份 SD 卡。
简化的 fstab 如下所示:
...
uuid=123123 /mnt/exthd ntfs rw,... 0 0
/dev/sdb1 /mnt/sdcard vfat ro,... 0 0
Run Code Online (Sandbox Code Playgroud)
我无法通过UUID安装SD卡,因为当我格式化卡或者当然使用另一张卡时它会改变。
问题是,我能否确定外部驱动器始终使用 /dev/sda1 挂载?
或者我是否必须解析例如 的输出lsblk,查看哪个设备尺寸较小,然后使用此设备文件?
请注意,我不会收到来自覆盆子或其他任何东西的任何反馈。我必须确保这总是有效。如果有必要的话,我想我可以自己进行解析。问题只是,我是否必须处理它,或者是否有更简单的方法。
我正在寻找一种工具,可以扫描我的无 GUI 服务器,并以某种丰富的视觉格式创建所有块设备及其关系(磁盘分区、mdadm 设备、LVM PV 和 LV 等)的易于理解的粗略概述( html、pdf、svg、png...)。
这是一个简单的可视化示例:
+--------+---------------------+ +-------------------+
| sda1 | | | sdc1 |
+--------+---------------------+ +-------------------+
+ + +
+--------+---------------------+ +-------------------+
| sdb1 | | | sdd1 |
+--------+---------------------+ +-------------------+
| | |
v v v
+---+---+ +---------+----------+ +--------+----------+
| md0 | | md1 | | md2 |
+-------+ +---------+----------+ +--------+----------+
| /boot | \ /
ext4 \ /
\ /
+
|
v
+------------------------------------------+
| vgmain |
+------+-----------------+-----------------+
|/root | /home | /var | …Run Code Online (Sandbox Code Playgroud) 块设备提供缓冲。这意味着write()在内核将数据写入设备之前,块设备上可以返回成功。程序可以通过调用 来等待所有缓冲的写入fsync()。
我已使用dd(或cat) 将文件系统映像写入设备。默认情况下不调用这些命令fsync()。
接下来,假设我想将mount写入的块设备作为文件系统。
我认为最安全的做法是在安装之前使用该sync命令。但是如果我不同步块设备怎么办?文件系统是否可能尝试读取一些尚未写入设备的块?那么它是否可以读取设备的旧内容,而不是文件系统映像中的正确数据?
我的主要兴趣是 Linux 行为。(StackExchange 鼓励我提出一个具体问题。不过,我也可以对任何替代或历史行为投赞成票:-)。
我有几个脚本,可以为我构建 Linux live CD。
我有几个内核,我自己构建用于这些内核。几周前用内核构建了一张这样的 Live CD,一切正常,我仍然可以从收集的构建文件构建它。
当试图从头开始构建完全相同的 Live CD 时,它收集相同的内核,它不会启动。
我比较了几周前构建目录中的内核和现在使用的内核,并diff声明它们是相同的。
cmp bzImage kernel/vmlinuz-4.15.18 返回 0
> md5sum bzImage kernel/vmlinuz-4.15.18
7add044e080dc32e7810bf803450c95c bzImage
7add044e080dc32e7810bf803450c95c kernel/vmlinuz-4.15.18
Run Code Online (Sandbox Code Playgroud)
stat 有以下几点要说:
File: bzImage # works
Size: 7996976 Blocks: 15624 IO Block: 4096 regular file
Device: 811h/2065d Inode: 3714381 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ me) Gid: ( 1000/ me)
Access: 2019-01-08 20:00:48.842172091 +0100
Modify: 2018-12-10 15:43:47.428001000 +0100
Change: 2018-12-10 15:43:47.428001000 +0100
Birth: -
File: kernel/vmlinuz-4.15.18 # doesn't work
Size: 7996976 Blocks: …Run Code Online (Sandbox Code Playgroud) 传统上,假设存储设备(硬盘驱动器)除了简单地覆盖数据外,没有“删除”数据的机制。我可以看到一些理论场景,在这些场景中,通知块设备不再需要它们的底层存储是有用的,但我没有看到任何这样做的机制。
用例:
这看起来与FALLOC_FL_PUNCH_HOLE. 但是从我在那里读到的内容来看,这纯粹是为了从文件系统中的文件中取消分配空间。也就是说,用户空间应用程序可以通知文件系统不需要空间。但这与通知块设备不需要空间的文件系统不同,是吗?
那么是不是在每种情况下都有解决方法,或者我们有一种机制允许文件系统和交换在不再需要块时通知块设备?
是否可以在文件上创建 RAID 阵列以进行测试?
假设我想创建一个 1 级 RAID 并且我没有例如 10 个块设备来做到这一点,但我想使用文件而不是块设备来模拟它。
到目前为止我所做的是:
fallocate -l 1M disk1
fallocate -l 1M disk2
mkfs.ext4 disk1
mkfs.ext4 disk2
sudo mdadm --create --assume-clean --level=1 --raid-devices=2 /dev/md0 ./disk1 ./disk2
Run Code Online (Sandbox Code Playgroud)
但在那之后我得到了错误:
mdadm: ./disk1 is not a block device.
Run Code Online (Sandbox Code Playgroud)
任何的想法?
block-device ×10
linux ×3
buffer ×2
linux-kernel ×2
sd-card ×2
benchmark ×1
cache ×1
corruption ×1
devices ×1
disk-usage ×1
files ×1
hard-disk ×1
mdadm ×1
mount ×1
patch ×1
raid ×1
upgrade ×1