Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.UNIX.BSD
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.UNIX.BSD с датами от 18 Jan 11 22:51:00 до 16 Sep 24 17:28:15, всего сообщений: 10763
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 1444 из 10763 ===================================== RU.UNIX.BSD =
От   : Valentin Nechayev                2:5020/400         13 May 14 12:41:36
Кому : Victor Sudakov                                      13 May 14 12:41:36
Тема : Re: Прикол с ленточкой
FGHI : area://RU.UNIX.BSD?msgid=<1187487570@segfault.kiev.ua>+7537bc72
На   : area://RU.UNIX.BSD?msgid=2:5005/49+53717abb
= Кодировка сообщения определена как: CP866 ==================================
==============================================================================
From: Valentin Nechayev <netch@segfault.kiev.ua>


>>> Victor Sudakov wrote:

>>> И уж коли пошла об этом речь, что такое вообще блок, какой его
>>> физический смысл, например при записи на /dev/sa0 ?
VD>> man 4 sa. Там эта тема аж на две главы расписана.
VS> Там слишком много буков, особенно что касается variable block-size.  Если
VS> можешь - своими словами в трех словах.

VS> Про fixed block-size чуть яснее, но всё равно непонятно: что такое магическое
VS> делает dd или tar в конце очередного блока данных? Шлет какой-то разделитель?
VS> Закрывает девайс?

Hичего не делает особого. Один write() должен писать ровно 1 блок, для
этого размер передаваемых данных во write() должен совпадать с
размером блока, иначе драйвер имеет полное право отказать.
Аналогично для чтения, буфер равен размеру блока и один read() читает
ровно 1 блок.

Аналогично для случая переменного размера блока, но драйвер и
устройство должны поддерживать такие размеры (и шина тоже - например,
SCSI). Если участники не в состоянии писать блок такого размера, они
драйвер должен дать отказ на write() с соответствующим кодом (EINVAL,
скорее всего). Если прочтён блок меньшего размера, чем буфер, read()
выдаст реальный размер.

Hа ленте каждая последовательность (гарантированно идентифицируемая
начиная с некоторого не сильно большого участка перед ней) может быть
или частью блока данных, или одной из нескольких специальных меток,
в частности:
[*] метка границы блока
[*] метка границы файла в архиве
[*] метка границы архива
[*] метка начала (конца) ленты в целом

Метки конструктивно рассчитаны на возможность чтения при ускоренной
перемотке. Точная структура существенно зависит от вендора.
Управление устройством должно поддерживать на уровне ioctl() запись
меток границы файла и архива, чтение вперёд или назад до
соответствующей метки, конца размеченного участка (который
определяется по регулярному наличию меток границ блоков) или меток
границы ленты.

>>> Блоки отделяются друг от друга каким-то специальным разделителем?
VD>> Логически (на уровне команд SCSI) - да. А физически хрен знает как там
VD>> у разных вендоров устроено.
VS> Hе надо на уровне команд SCSI. Скажи, если знаешь, что происходит на границе
VS> блока на уровне пишущей на ленту программы, например tar. Устройство она
VS> переоткрывает, что ли?

Hет, не переоткрывает. См. выше.

>>> Если tar-архив по умолчанию (без указания ключа -b) кратен 10240
>>> байтам (размер блока по умолчанию в tar), то почему такой tar-архив
>>> всегда нормально укладывается на ленту при "dd bs=64k"?

VD>> Всегда ли?

VS> Hа моем опыте обратного случая не было ни разу, это при регулярных еженедельных
VS> бэкапах пары десятков разных fs в течение многих лет. Hастолько ни разу не
VS> было, что я уже начал считать, что современным ленточкам с variable size уже
VS> всё пофиг и можно писать как попало, лишь бы успевать кормить стример данными.

VS> Первый раз за много лет увидел нечто такое, что описал в первом письме данного
VS> треда.

Возможно, твой драйвер делает автодополнение записываемого блока или
позволяет писать укороченный блок. Почему он это не делает на zip - не
знаю. Может, у него есть пределы этой возможности (например,
дополнение до размера, кратного 16, или дополнение минимум 30
байтами).


--netch--
--- ifmail v.2.15dev5.4
* Origin: Dark side of coredump (2:5020/400)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.107780 секунды