#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 — если бы вы работали на автономном диске, вы могли бы сделать что-то подобное, но безопасного способа записи на подключенный том просто не существует. Я не хочу показаться суровым, но очень легко реализовать что-то, что кажется работающим, но будет незаметно поглощать данные и повреждать тома, и это будет очень трудно поймать