создайте пустой img с помощью dd так, чтобы его сектора были размером 4096 байт, а не 512

Опираясь на ответ Луки и комментарии...

На момент написания этой статьи repotrackбудет соответствовать всем следующим архитектурам, если указано x86_64:x86_64, athlon, i686, i586, i486, i386и noarch. ].

Для моих целей меня интересуют только пакеты x86_64и noarch, и я знаю, что в моем дистрибутиве нет пакетов athlon.

Следующая команда получает список URL-адресов пакетов, отфильтровывает i?86архитектуры и распечатывает имена пакетов по мере их загрузки:

repotrack --arch=x86_64 --urls gs1000-server \
    | sed '/\.i[3-6]86\.rpm$/d' \
    | xargs -I {} sh -c 'curl -s -O {}; echo {} | rev | cut -d '/' -f 1 | rev'

Обратите внимание, что repotrackне предупреждает вас, если не может найти пакет, который удовлетворяет зависимости в ваших включенных репозиториях. Он молча пропускает его.

4
13.02.2020, 18:26
3 ответа

Это невозможно сделать так, как вы описываете. Размер сектора — это свойство блочного устройства, которого файлы по своей сути не имеют. Файл — это просто последовательность определенного количества байтов, то, как они хранятся, — это деталь реализации...

Итак, если вам нужен определенный размер сектора, вам нужно блочное устройство. И Linux предлагает петлевые устройства только для этой цели, поэтому используйте losetupдля создания виртуального блочного устройства с файлом -с определенным размером сектора.

Тестовый файл:

# dd if=/dev/zero of=empty4k.img bs=4096 count=8192

Обычное петлевое устройство:

# losetup --find --show empty4k.img 
/dev/loop0
# fdisk -l /dev/loop0
Disk /dev/loop0: 32 MiB, 33554432 bytes, 65536 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

4096 -Устройство петли байтовых секторов:

# losetup --find --show --sector-size=4096 empty4k.img 
/dev/loop1
# fdisk -l /dev/loop1
Disk /dev/loop1: 32 MiB, 33554432 bytes, 8192 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

В обоих случаях файл полностью идентичен, свойство размера сектора обеспечивается уровнем устройства блочного цикла.

14
28.04.2021, 23:23

Значение bs, заданное для dd, просто указывает, насколько большим должен быть буфер при создании файла. В итоге файл состоит только из нуля -байт, информации о выравнивании нет.

Вы должны использовать специальный параметр для fdisk, то есть -b, в соответствии со страницейman-fdisk(8):

.
  -b, --sector-size sectorsize
          Specify  the  sector  size  of  the  disk.   Valid values are 512,    1024, 2048, and 4096.  (Recent kernels know the sector size.  Use this option only on old kernels or to override the kernel's
          ideas.)  Since util-linux-2.17, fdisk differentiates between logical and physical sector size.  This option changes both sector sizes to sectorsize.
11
28.04.2021, 23:23

Размер блока до ddпросто просит его читать/записывать кусками этого размера. Раньше было уместно записывать на диск -куски размера сектора для повышения производительности, учитывая сегодняшний диск и гораздо более умную операционную систему, обрабатывающую ввод-вывод, это мало (, если вообще )разницы.

0
28.04.2021, 23:23

Теги

Похожие вопросы