sg_write_same (sg3_utils) и команда dd - PullRequest
0 голосов
/ 28 января 2019

Я пишу файл на конкретном lba с помощью команды sg_write_same.Затем я читаю конкретный блок с помощью команды dd.Я не могу получить файл.Вот последовательность шагов, которые я выполняю.

a> sg_write_same --32 --lba=2468 --in=sg_modes.c /dev/sda
b> dd if=/dev/sda skip=2468 bs=512 of=file  count=10000.

Но я не могу получить файл sg_modes.c из of = file.# Пожалуйста, дайте мне знать, как я могу проверить записи и прочитать.

1 Ответ

0 голосов
/ 28 января 2019

Как минимум, вам необходимо указать длину передачи в дополнение к другим аргументам:

 sg_write_same --32 --lba=2468 --in=sg_modes.c --xferlen=512 /dev/sda

Вы также можете обнаружить, что ваше устройство не поддерживает WRITE SAME (32).Попробуйте варианты --16 или --10, если похоже, что они не работают.

WRITE_SAME записывает количество копий входных данных.В приведенном выше примере записывается только одна копия первого логического блока (512 байт).При запуске команды существует неявное (по умолчанию) --num=1.Если вы хотите, чтобы он записал весь файл, вам нужно указать --xferlen, равный размеру исходного файла, а затем разделить на 512, чтобы получить значение для --num.Однако маловероятно, что он делится поровну на 512, поэтому вам придется немного поцарапать голову.

Например, вы можете написать 8 копий первых 512 байт файла, начиная с lba2468, например:

 sg_write_same -v --32 --lba=2468 --num=8 --xferlen=512 --in=sg_modes.c /dev/sda

Тогда вы сможете наблюдать начало файла при чтении на LBA 2468, 2469, 2470 и т. Д.

Если, однако,Ваше намерение состоит в том, чтобы просто написать файл один раз, возможно, вы просто хотите использовать обычный старый SCSI WRITE (16).

...