标签: block-device

SD卡损坏并卡在32MB,有什么办法修复吗?

使用 Linux 区域,因为我使用 Linux 应用程序和实用程序。

我的手机崩溃了(好几次)并且损坏了我的 microSD 卡。它似乎不再有分区,并且显示为 32MB 而不是 2GB。那就是使用testdisk. dd并且ddrescue仅从中提取了 30.6MB 的空值。

它是正品 SanDisk 品牌,从信誉良好的零售商处购买,该空间已经完美运行一年了。

我希望它已经有了,但我不认为询问有什么坏处。即使我忘记了我想要的几个文件,格式化也可能会给我留下一张相当无用的 32MB 卡。

如果有人有任何至少修复该卡的方法,将不胜感激。

data-recovery block-device corruption sd-card

5
推荐指数
1
解决办法
4万
查看次数

从 df 设备名称到物理驱动器名称(供应商/类型)

通过 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)

linux disk-usage hard-disk block-device

5
推荐指数
1
解决办法
9236
查看次数

如何检查/测试内部读卡器速度

我得到了新的 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)

block-device benchmark sd-card

5
推荐指数
1
解决办法
4076
查看次数

xdelta3 无法在块设备上解码

我正在尝试使用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论点等于补丁的创建者。事实上,我可以将这个尺寸加倍,但仍然行不通。

patch buffer upgrade block-device

5
推荐指数
0
解决办法
203
查看次数

如何确保某些设备始终使用相同的设备文件?

当通过 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,查看哪个设备尺寸较小,然后使用此设备文件?

请注意,我不会收到来自覆盆子或其他任何东西的任何反馈。我必须确保这总是有效。如果有必要的话,我想我可以自己进行解析。问题只是,我是否必须处理它,或者是否有更简单的方法。

mount devices block-device

5
推荐指数
1
解决办法
2578
查看次数

什么工具可以可视化 Linux 块设备(分区、LVM PV、LV、mdadm 设备...)

我正在寻找一种工具,可以扫描我的无 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)

block-device

5
推荐指数
1
解决办法
1210
查看次数

块设备缓存与文件系统

块设备提供缓冲。这意味着write()在内核将数据写入设备之前,块设备上可以返回成功。程序可以通过调用 来等待所有缓冲的写入fsync()

我已使用dd(或cat) 将文件系统映像写入设备。默认情况下不调用这些命令fsync()

接下来,假设我想将mount写入的块设备作为文件系统。

我认为最安全的做法是在安装之前使用该sync命令。但是如果我不同步块设备怎么办?文件系统是否可能尝试读取一些尚未写入设备的块?那么它是否可以读取设备的旧内容,而不是文件系统映像中的正确数据?

我的主要兴趣是 Linux 行为。(StackExchange 鼓励我提出一个具体问题。不过,我也可以对任何替代或历史行为投赞成票:-)。

linux cache buffer block-device

5
推荐指数
1
解决办法
2034
查看次数

当它们与字节相同时,为什么一个内核可以工作,而另一个却不能?

我有几个脚本,可以为我构建 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)

block-device files linux-kernel

5
推荐指数
0
解决办法
112
查看次数

当不再需要块时,Linux 文件系统会通知块设备吗?

传统上,假设存储设备(硬盘驱动器)除了简单地覆盖数据外,没有“删除”数据的机制。我可以看到一些理论场景,在这些场景中,通知块设备不再需要它们的底层存储是有用的,但我没有看到任何这样做的机制。

用例:

  • 几乎所有现代 SSD 都使用磨损均衡来延长使用寿命。这可以通过简单地拥有比报告大小更多的内部存储块并在它们之间循环来实现。但是如果 SSD 被告知不再需要块,它将提供一个更大的池来循环。
  • 在 RAM 中创建的文件系统(不包括 tmpfs)。在文件被删除的地方,如果文件系统不能报告不需要空间,则底层 ramdisk 不能将分配的空间返回给空闲 RAM。
  • 当交换空间中不再使用页面时,使用zram 的交换解决方案需要通知块设备,否则它们会在 RAM 中留下大量“垃圾”。

这看起来与FALLOC_FL_PUNCH_HOLE. 但是从我在那里读到的内容来看,这纯粹是为了从文件系统中的文件中取消分配空间。也就是说,用户空间应用程序可以通知文件系统不需要空间。但这与通知块设备不需要空间的文件系统不同,是吗?

那么是不是在每种情况下都有解决方法,或者我们有一种机制允许文件系统和交换在不再需要块时通知块设备?

block-device linux-kernel

5
推荐指数
1
解决办法
362
查看次数

在文件而不是块设备上创建 RAID 阵列

是否可以在文件上创建 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)

任何的想法?

linux raid mdadm block-device

5
推荐指数
1
解决办法
593
查看次数