Определить, используется ли необработанный сектор диска

#linux #disk #inode

#linux #диск #индекс

Вопрос:

Я пытаюсь написать средство обнуления свободного пространства, используя open(2) , lssek[64](2) и write(2) . Я пытаюсь определить, какой сектор диска используется.

Я взглянул на dd(1) из coreutils, но утилита не выполняет аналогичные проверки. В мире Windows я мог бы вызвать DeviceIoControl с помощью FSCTL_GET_VOLUME_BITMAP.

Для необработанного сектора существует ли системный вызов, который позволяет мне определить, используется ли сектор?

Ответ №1:

Традиционный способ, которым это достигается (поскольку ваш метод подвержен повреждающим файловую систему условиям гонки), заключается в создании гигантского файла, его обнулении, затем удалении файла. Фактически, вы можете сделать это с помощью sh напрямую, файл не нужен:

 # dd will run until disk space is exhausted
dd if=/dev/zero of=__somefile.bin bs=1M conv=noerror; rm __somefile.bin
  

Комментарии:

1. «подвержен условиям гонки, повреждающим файловую систему». Согласен — я еще не рассматривал блокировку. Я подумал, что хорошим первым шагом было бы определить, используется ли он.

2. Вы не можете заблокировать сектор ни в Windows, ни в Linux — если бы вы работали на автономном диске, вы могли бы сделать что-то подобное, но безопасного способа записи на подключенный том просто не существует. Я не хочу показаться суровым, но очень легко реализовать что-то, что кажется работающим, но будет незаметно поглощать данные и повреждать тома, и это будет очень трудно поймать