The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Длина сектора диска, !*! oleg_3, 10-Май-10, 07:40  [смотреть все]
[СИ] Длина сектора диска

Язык СИ
ОС UNIX

База данных и транзакция.
Два вопроса.

Имеется файл строк, каждая строка это отдельная запись БД.
Нужно сделать транзакцию - изменить одну из этих строк.
При этом длина строки не меняется.
Должно выдерживать мягкий сбой (выключение питания).
Винт плохой и при сбое портит весь сектор (или иную минимальную порцию данных).
Значит я должен в журнале сохранить всё то, что может быть испорчено,
т. е. сектор (или секторы) содержащий эту строку.


Вопрос 1.

О длине сектора.
Как узнать длину сектора или иной порции данных,
которая может быть испорчена?

Вопрос 2.

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

Сработает ли такой подход?

  • Длина сектора диска, !*! svn, 10:11 , 10-Май-10 (1)
    • Длина сектора диска, !*! oleg_3, 11:08 , 10-Май-10 (2)
      Извините. Я не достаточно понятно сформулировал
      вопросы.
      Да, т. к. речь идет об отключении питания, то
      всё должно быть на диске, а не в буфере.
      В моём вопросе подразумевалось:
      write();
      fsync();
      всюду такая пара, при записи журнала и при записи изменений в файл.
      И в момент записи на диск изменённых данных отключается питание.
      Винт плохой и при сбое портит весь сектор (или иную минимальную порцию данных).
      С учетом этого и надо понимать поставленные вопросы.
  • Длина сектора диска, !*! ACCA, 20:43 , 10-Май-10 (6)
    • Длина сектора диска, !*! oleg_3, 23:16 , 10-Май-10 (7)
      Спасибо.
      Это конкретный ответ на конкретный вопрос.

      Программа прикладная.
      Я знаю, что "флэшки" пишут огромными блоками.
      Но про диски, пишущие целыми дорожками,
      я не знал.
      Я исходил из того, что пишут в книгах и статьях о дисках,
      а так же в статье SQLite
      http://www.sqlite.org/atomiccommit.html.
      В этой статье написано, что если можно от системы получить
      длину сектора, то используют её. Иначе 512 байт.

      • Длина сектора диска, !*! oleg_3, 04:54 , 11-Май-10 (8)

        Не могу сказать что удовлетворён
        Вашим ответом.
        Предполагается работа на арендованных
        машинах-серверах. ОС UNIX, ufs.
        Нигде не попадалось почитать о дисках
        с такими большими блоками.
        Может быть дадите ссылку или иную зацепку,
        где можно что-нибудь найти об этом.

        Но всё равно спасибо.

      • Длина сектора диска, !*! guest, 10:32 , 11-Май-10 (9)
        • Длина сектора диска, !*! oleg_3, 00:25 , 12-Май-10 (10)
          Спасибо за отклик.

          В этой и других структурах
          stat
          statfs
          есть ещё поле длины блока f_bsize.
          Я бы согласился взять даже большее из них (см. вопрос 2).
          Как будто, я только получу некоторую избыточность, не страшно.

          Но вот сильно смущают слова ACCA о блоках 64K и 4M.
          Хотелось бы узнать о таких устройствах.
          Не может ли быть такого, что блок файловой системы
          меньше физического сектора диска?
          Для "флэшек" наверное может быть.
          Но они не очень применяются на машинах-серверах.
          А вот для дисков?

          После его заявления появился вопрос

          вопрос 3
          Не может ли быть такого, что блок файловой системы
          меньше физического сектора диска?




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру