Форум сайта python.su
Товарищи, гуру Phyton-а, у меня есть два задания, необходимо отформатировать usb-флэш и стереть остаточные файлы, не затирая имеющиеся, подскажите пожалуйста каким образом это делается, в phyton я не особо силен, писал только на си с плюсами, заранее благодарен за вашу непосильную помощь!)
Офлайн
AleksandrTihomolovВам не кажеться что тут присутвуют взаимоисключающие параграфы? какие имеющиеся файлы могут быть после форматирования?
необходимо отформатировать usb-флэш и стереть остаточные файлы, не затирая имеющиеся
import io block = b'\0' * 4096 with io.FileIO('/dev/sdb', 'w') as f: while f.write(block): pass
[code python][/code]
Отредактировано PEHDOM (Апрель 18, 2018 10:03:28)
Офлайн
PEHDOMИмеется ввиду два разных варианта, как две разные функции программы, одно - это форматирование, а другое - удаление мусора (ранее удаленных файлов) без затирания имеющихся файлов (скорее всего файлы должны копироваться в другую область на системе, после форматироваться диск (как это было указано Вами), а затем из области памяти, в которую были скопированы файлы, произвести запись файлов на диск (с этой процедурой я тоже пока не разобрался)). Что касается ОС, на данном этапе - это линукс, а в перспективе поддержка также виндоус. Спасибо за ответ!
Офлайн
AleksandrTihomolovУ тебя должно быть реализовано два разных алгоритма. Можно, конечно, сделать одну программу с двумя реализациями, но лучше сделать отдельные версии программы для разных систем. При росте количества систем это имеет значение.
Что касается ОС, на данном этапе - это линукс, а в перспективе поддержка также виндоус.
PEHDOMblock = b'\0' * 4096
>>> bytes(5) b'\x00\x00\x00\x00\x00' >>>
Отредактировано py.user.next (Апрель 19, 2018 00:28:36)
Офлайн
> скорее всего файлы должны копироваться в другую область на системе, после форматироваться диск (как это было указано Вами), а затем из области памяти, в которую были скопированы файлы, произвести запись файлов на диск
Всё намного проще. Создаёшь файл заполненный нулями, нули в него копируются пока не кончится место на флешки, после этого файл удаляется.
> block = b'\0' * 4096
А почему 4096? Размер блока зависит от ФС, по этому его надо смотреть через os.statvfs.
Отредактировано Rodegast (Апрель 19, 2018 10:51:44)
Офлайн
AleksandrTihomolovну скопировать-очистить-отформатировать-скопироватьназад это самый простой способ, он годиться если вам нужно делать такие операции достаточно редко. Минус такого подхода, при сбоях в работе программы\компьютера все данные могут потеряться, нужно думать о защите а-ля транзакции при копировании туды-сюды.
удаление мусора (ранее удаленных файлов) без затирания имеющихся файлов (скорее всего файлы должны копироваться в другую область на системе, после форматироваться диск (как это было указано Вами), а затем из области памяти, в которую были скопированы файлы, произвести запись файлов на диск (с этой процедурой я тоже пока не разобрался))
AleksandrTihomolovну с этим все просто, гуглите shutil
а затем из области памяти, в которую были скопированы файлы, произвести запись файлов на диск (с этой процедурой я тоже пока не разобрался))
py.user.nextИМХО для этого пишутся отдельные модули с идентичными интерфейсами которые подгружаються в зависимости от ОС. И все чисто и понятно.
У тебя должно быть реализовано два разных алгоритма. Можно, конечно, сделать одну программу с двумя реализациями, но лучше сделать отдельные версии программы для разных систем. При росте количества систем это имеет значение.
Rodegastда пофиг,в данном случае мы не ФС чистим а весь диск перед форматированием, 4096 даже мало, уж очень медленно идет запись такими блоками, в идеале нужно выставлять от 4M до 16М а то и 32М.А при работе с ФС, таки да, нужно таки смотреть на размер блока в самой ФС.
А почему 4096? Размер блока зависит от ФС, по этому его надо смотреть через os.statvfs
[code python][/code]
Отредактировано PEHDOM (Апрель 19, 2018 11:04:57)
Офлайн
> в данном случае мы не ФС чистим а весь диск перед форматированием
Ты его не форматируешь, а именно забиваешь нулями.Вот забьёшь ты его и что дальше? Откуда ФС возьмётся?
Офлайн
Rodegastестествено, после этого на диске нету ничего , от слова совсем, потом создаем раздел и форматируем его. можно забить нулями раздел а не весь физический диск, но вобщем на рамер блока это никак не влияет, поскольку оно всеравно потрет все служебные данные, както таблицу FAT\суперблок\MFT и пр.
Ты его не форматируешь, а именно забиваешь нулями.Вот забьёшь ты его и что дальше? Откуда ФС возьмётся?
[code python][/code]
Офлайн
> после этого на диске нету ничего , от слова совсем, потом создаем раздел и форматируем его.
А тогда какой смысл в данный программе? Проще в терминале вызвать mkfs.vfat и оно отформатирует всё что надо.
Офлайн
PEHDOMЭто теоретически. На практике же всё различается, вплоть до установки в систему, вплоть до хранения конфигурации программы, способов загрузки этой конфигурации в программу. А вывод результатов в какой-нибудь системе может требовать дополнительного специфичного форматирования, переводов. Ну вот пример различия - открытие файла на запись. В винде, например, в текстовом режиме будет ставиться \r\n в конце каждой строки, тогда как такой файл, рассматриваемый потом в лине, будет всё так же содержать эти \r, которых в лине быть не должно. То есть для унификации самого файла между системами в винде файл нужно уже по-другому открывать, чтобы там ничего лишнего не было в итоге. Если будешь всё в одной программе писать, то фактически это будут две отдельные программы, подгружаемые по своим условиям. Вроде так будет всё нормально, но стоит тебе внести изменение в одну программу (добавить фичу или исправить баг), специфичное для её операционной системы, как тут же это изменение запросто зацепит другую программу, потому что у них есть общие части. Общие части живут хорошо, пока не появится такой сюрприз в виде неожиданного бага, который в одной системе глючит вот так, а в другой системе глючит совсем по-другому. Получится, что в одной системе тебе надо эту общую часть одним образом отредактировать, а в другой системе - совсем другим.
ИМХО для этого пишутся отдельные модули с идентичными интерфейсами которые подгружаються в зависимости от ОС. И все чисто и понятно.
Отредактировано py.user.next (Апрель 20, 2018 01:56:18)
Офлайн