标签: block-device

原始块设备的比较

是否有一个实用程序(或一些 shell 魔法)可以让我比较两个块设备?

详细信息:我有一个大型 (0.5 TB) RAID 设备,我已使用 dd 将其备份到稍大的 SATA 设备。该设备上有多个分区,但是我从“父”设备而不是分区设备节点复制(例如,我复制 /dev/hda 而不是 /dev/hda1)。

我想验证备份是否良好/正确。

我曾考虑过在每个设备上运行 md5sum,但是这不会给我一个准确的结果,因为第二个设备比第一个设备稍大,因此额外的字节会改变散列。

dd hard-disk block-device

13
推荐指数
1
解决办法
2万
查看次数

md 上的 bcache 或 bcache 上的 md

bcache允许一个或多个快速磁盘驱动器(例如基于闪存的固态驱动器 (SSD))充当一个或多个较慢硬盘驱动器的缓存

如果我理解正确,

  • 可以分配一个 SSD *来缓存多个后备 HDD,然后可以使用 mdadm
    或对生成的缓存设备进行 RAID
  • 多个 HDD 可以 RAID 到一个单一的支持 md 设备和分配给缓存的 SSD

我想知道哪种方法更明智。我突然想到,使用一种或其他技术增加 RAID5/6 可能更简单,但我不确定是哪一种!

选择一种方法而不是另一种方法(对于包含 VM 后备文件的大型非根文件系统)是否有充分的理由(例如增加后备存储或其他任何东西)?


* “一个 SSD”是指某种冗余 SSD 设备,例如两个物理 SSD 的 RAID1

linux ssd block-device bcache

13
推荐指数
1
解决办法
7303
查看次数

`dd` 如何用于右移数据块?

考虑一个 100MB 的原始块设备作为一个简单的例子。即 204800 个块,每个块 512 字节,总共 102760448 字节。

挑战在于移动前 98MB(200704 个块),因此在它前面有 2MB(4096 个块)的间隙。就地执行此操作要求未向尚未读取的扇区写入任何内容。实现此目的的一种方法是引入缓冲区:

$ dd if=/dev/sdj2 count=200704 | mbuffer -s 512 -b 4096 -P 100 | dd of=/dev/sdj2 seek=4096
Run Code Online (Sandbox Code Playgroud)

期望是mbuffer在将任何内容传递给写入器之前将存储 4096 个块,从而确保没有任何内容写入尚未读取的区域,并且写入器滞后读取器缓冲区的大小。缓冲区应该允许读取器和写入器在这些约束内尽可能快地操作。

但是,它似乎不能可靠地工作。我试过使用真实的设备,但它从来没有在它们上工作过,而对文件的实验在我的 64 位机器上有效,但在我的 32 位机器上无效。

首先,一些准备工作:

$ dd if=/dev/sdj2 count=200704 | md5sum
0f0727f6644dac7a6ec60ea98ffc6da9
$ dd if=/dev/sdj2 count=200704 of=testfile
Run Code Online (Sandbox Code Playgroud)

这不起作用:

$ dd if=/dev/sdj2 count=200704 | mbuffer -s 512 -b 4096 -P 100 -H | dd of=/dev/sdj2 seek=4096
summary: 98.0 MiByte in  4.4sec - average of 22.0 …
Run Code Online (Sandbox Code Playgroud)

dd block-device

11
推荐指数
1
解决办法
1578
查看次数

我的 /tmp 安装在哪里?

$ df /tmp
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/root      480589544 42607368 413546516  10% /

$ ls /dev/root
ls: cannot access /dev/root: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我想检查我的默认 Debian 安装位置是/tmp在 RAM 中还是在磁盘上,但现在完全糊涂了。为什么不存在的设备会被报告为文件系统类型?“安装在/”是什么意思?

这是输出mount

/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=811520k,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=1013960,mode=755)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=1623020k) …
Run Code Online (Sandbox Code Playgroud)

partition mount block-device

11
推荐指数
2
解决办法
2万
查看次数

如何使用可选偏移量在块设备上找到第一个非零字节?

我正在尝试使用dd并打印其偏移量在块设备上找到第一个非零字节(从可选偏移量开始),但我被卡住了。我没有dd在标题中提及,因为我认为可能有比dd这样做更合适的工具,但我认为dd应该是一个好的开始。如果您知道更合适的工具和/或更有效的方法来实现我的目标,那也没关系。

与此同时,我将向您展示我dd在 bash 方面的进展,到目前为止。

#!/bin/bash

# infile is just a temporary test file for now, which will be replaced with /dev/sdb, for instance
infile=test.txt
offset=0

while true; do
  byte=`dd status='none' bs=1 count=1 if="$infile" skip=$offset`
  ret=$?

  # the following doesn't appear to work
  # ret is always 0, even when the end of file/device is reached
  # how do I correctly determine if dd has reached the end of file/device?
  if …
Run Code Online (Sandbox Code Playgroud)

bash dd block-device byte

11
推荐指数
2
解决办法
921
查看次数

某个设备文件背后的驱动程序是什么?

给定一个设备文件,比如说/dev/sdb,是否可以确定它背后的驱动程序?

具体来说,我想确定我的存储设备正在使用什么驱动程序。fdisk -l列出 2 个设备:/dev/sda/dev/sdb. 一个是 SATA 硬盘驱动器,另一个是 USB 大容量存储设备 - 实际上是 SD 卡。

我如何以编程方式确定哪个是哪个?

我正在编写一个软件,我想保护初学者免于擦除他们的硬盘驱动器,同时允许他们擦除他们的 SD 卡。

linux drivers devices block-device

10
推荐指数
1
解决办法
3391
查看次数

找出特定设备是否为 USB 大容量存储设备

语境

我正在从现有的dd工厂映像自动化 SD 卡映像。SD 卡始终通过外部 USB 读卡器连接,因此在系统中显示为 SCSI 块设备/dev/sd*

目前我的命令的语法是:SD 卡块设备write-image DEVICE在哪里DEVICE,例如。/dev/sdd.

问题

我已经在做一个基本的检查DEVICE来验证它的形式,/dev/sd*但这还不够:我担心用户(不习惯 Linux 的生产人员)犯错误并指定另一个看似有效的设备,例如。/dev/sda. 您可以看到迫在眉睫的灾难,特别是因为我的映像脚本需要root权限(请注意,不是编写映像本身,而是稍后修改SD卡,包括根据SD卡的实际大小调整分区大小)...

我想验证指定的设备实际上是某个 USB 大容量存储设备(或者至少是一个可移动设备),以便我可以保护系统磁盘不被意外丢弃。我怎样才能做到这一点?

/proc在网上或网上找不到任何相关内容,我现在很茫然。

linux devices usb-drive block-device removable-storage

10
推荐指数
1
解决办法
4056
查看次数

如何轻松找出块设备(或其一部分)是否以某种方式安装

我想知道确定(没有 root 权限)是否安装了块设备(例如sdb)或其任何部分(以及它的哪一部分)的最简单方法是什么。

检查/proc/mountssdb 是不够的,因为sdbLVM 可能使用它的分区之一。您可以检查,/sys/block/sdb/sdb*/holders/但您会得到dm-x必须解析为/dev/mapper名称才能检查的条目/proc/mounts。可能,但如果有更简单的解决方案......(应该不需要 root 权限)

linux mount proc sysfs block-device

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

如何在给定路径的情况下获取文件系统的 UUID?

我得到一个目录或文件的路径。

哪个实用程序/shell 脚本可以可靠地为我提供此目录/文件所在的文件系统的 UUID?

通过文件系统的 UUID 我的意思是UUID=...如所示的条目blkid

我正在使用红帽 Linux。

(有人建议我应该在 unix.stackexchange.com 上问这个问题,所以我把它从原来的 stackexchange.com 移了过来)

linux shell block-device uuid

10
推荐指数
1
解决办法
2967
查看次数

如何判断 Linux 块设备是否可修剪?

fstrim需要挂载Linux块设备,而且不是很冗长。blkdiscard可以看出,但这也需要写操作。

我能否以某种方式判断块设备是否支持修剪/丢弃,而不实际尝试修剪/丢弃其上的某些内容?

linux block-device trim

10
推荐指数
2
解决办法
3408
查看次数