Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 17, 2018 21:14:41

AleksandrTihomolov
Зарегистрирован: 2018-04-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

Товарищи, гуру Phyton-а, у меня есть два задания, необходимо отформатировать usb-флэш и стереть остаточные файлы, не затирая имеющиеся, подскажите пожалуйста каким образом это делается, в phyton я не особо силен, писал только на си с плюсами, заранее благодарен за вашу непосильную помощь!)

Офлайн

#2 Апрель 18, 2018 09:58:50

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

AleksandrTihomolov
необходимо отформатировать usb-флэш и стереть остаточные файлы, не затирая имеющиеся
Вам не кажеться что тут присутвуют взаимоисключающие параграфы? какие имеющиеся файлы могут быть после форматирования?
Что в вашем понимании “остаточные файлы”? вы имеете ввиду данные котороые остаются в ячейках памяти при форматировании или создании\удалении таблицы разделов?
Нужно ли это делать на чистом пайтоне или можно вызывать сторонние программы, например dd, fdisk или mkfs?
Какая ОС?
например такой код заполнит нулями весь диск под линуксами..
 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)

Офлайн

#3 Апрель 19, 2018 00:05:23

AleksandrTihomolov
Зарегистрирован: 2018-04-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

PEHDOM
Имеется ввиду два разных варианта, как две разные функции программы, одно - это форматирование, а другое - удаление мусора (ранее удаленных файлов) без затирания имеющихся файлов (скорее всего файлы должны копироваться в другую область на системе, после форматироваться диск (как это было указано Вами), а затем из области памяти, в которую были скопированы файлы, произвести запись файлов на диск (с этой процедурой я тоже пока не разобрался)). Что касается ОС, на данном этапе - это линукс, а в перспективе поддержка также виндоус. Спасибо за ответ!

Офлайн

#4 Апрель 19, 2018 00:25:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

AleksandrTihomolov
Что касается ОС, на данном этапе - это линукс, а в перспективе поддержка также виндоус.
У тебя должно быть реализовано два разных алгоритма. Можно, конечно, сделать одну программу с двумя реализациями, но лучше сделать отдельные версии программы для разных систем. При росте количества систем это имеет значение.

У меня была такая программа, которая старалась учитывать все системы, но в итоге чем дальше её пишешь, тем больше различий. Получается так, что у тебя в одной системе в программе хранится куча ненужного кода для другой системы. Она стала быстро превращаться в свалку и в итоге я её разделил на две версии. После этого каждая из них получилась чистая и одна вообще стала не нужна, потому что практически не используется.

PEHDOM
 block = b'\0' * 4096
  
>>> bytes(5)
b'\x00\x00\x00\x00\x00'
>>>



Отредактировано py.user.next (Апрель 19, 2018 00:28:36)

Офлайн

#5 Апрель 19, 2018 10:51:12

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

> скорее всего файлы должны копироваться в другую область на системе, после форматироваться диск (как это было указано Вами), а затем из области памяти, в которую были скопированы файлы, произвести запись файлов на диск

Всё намного проще. Создаёшь файл заполненный нулями, нули в него копируются пока не кончится место на флешки, после этого файл удаляется.

> block = b'\0' * 4096

А почему 4096? Размер блока зависит от ФС, по этому его надо смотреть через os.statvfs.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Апрель 19, 2018 10:51:44)

Офлайн

#6 Апрель 19, 2018 11:00:01

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

AleksandrTihomolov
удаление мусора (ранее удаленных файлов) без затирания имеющихся файлов (скорее всего файлы должны копироваться в другую область на системе, после форматироваться диск (как это было указано Вами), а затем из области памяти, в которую были скопированы файлы, произвести запись файлов на диск (с этой процедурой я тоже пока не разобрался))
ну скопировать-очистить-отформатировать-скопироватьназад это самый простой способ, он годиться если вам нужно делать такие операции достаточно редко. Минус такого подхода, при сбоях в работе программы\компьютера все данные могут потеряться, нужно думать о защите а-ля транзакции при копировании туды-сюды.

Альтернативный вариант работа напрямую с “сырыми” данными на диске. У каждой ФС свои тараканы, но грубо говоря читаем байты прямо с диска, находим служебные области, анализируем их, понимаем где хранятся файлы-папки, а где “пустое место”, и пустое место забиваем нулями. Тоесть вам нужно понимать, как устроена та или иная ФС. Причем понимать на очень глубоком уровне, вплоть до того за что отвечает каждый байт. Наверняка существуют уже готовые модули для низкоуровневой работы с ФС. Возмите для начала fat32, она достаточно простая, про ее устройство написано чуть более чем дофига, и большинство флешек форматируются по умолчанию именно в эти ФС.
Есть уже готовая либа, котороая много чего умеет, можете использовать ее , или как минимум посмотреть как там все устроено https://github.com/maxpat78/FATtools

AleksandrTihomolov
а затем из области памяти, в которую были скопированы файлы, произвести запись файлов на диск (с этой процедурой я тоже пока не разобрался))
ну с этим все просто, гуглите shutil
py.user.next
У тебя должно быть реализовано два разных алгоритма. Можно, конечно, сделать одну программу с двумя реализациями, но лучше сделать отдельные версии программы для разных систем. При росте количества систем это имеет значение.
ИМХО для этого пишутся отдельные модули с идентичными интерфейсами которые подгружаються в зависимости от ОС. И все чисто и понятно.

Rodegast
А почему 4096? Размер блока зависит от ФС, по этому его надо смотреть через os.statvfs
да пофиг,в данном случае мы не ФС чистим а весь диск перед форматированием, 4096 даже мало, уж очень медленно идет запись такими блоками, в идеале нужно выставлять от 4M до 16М а то и 32М.А при работе с ФС, таки да, нужно таки смотреть на размер блока в самой ФС.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 19, 2018 11:04:57)

Офлайн

#7 Апрель 19, 2018 11:11:31

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

> в данном случае мы не ФС чистим а весь диск перед форматированием

Ты его не форматируешь, а именно забиваешь нулями.Вот забьёшь ты его и что дальше? Откуда ФС возьмётся?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Апрель 19, 2018 11:23:52

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

Rodegast
Ты его не форматируешь, а именно забиваешь нулями.Вот забьёшь ты его и что дальше? Откуда ФС возьмётся?
естествено, после этого на диске нету ничего , от слова совсем, потом создаем раздел и форматируем его. можно забить нулями раздел а не весь физический диск, но вобщем на рамер блока это никак не влияет, поскольку оно всеравно потрет все служебные данные, както таблицу FAT\суперблок\MFT и пр.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#9 Апрель 19, 2018 11:32:36

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

> после этого на диске нету ничего , от слова совсем, потом создаем раздел и форматируем его.

А тогда какой смысл в данный программе? Проще в терминале вызвать mkfs.vfat и оно отформатирует всё что надо.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#10 Апрель 19, 2018 11:41:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Необходимо отформатировать usb-флэш и стереть остаточные файлы

PEHDOM
ИМХО для этого пишутся отдельные модули с идентичными интерфейсами которые подгружаються в зависимости от ОС. И все чисто и понятно.
Это теоретически. На практике же всё различается, вплоть до установки в систему, вплоть до хранения конфигурации программы, способов загрузки этой конфигурации в программу. А вывод результатов в какой-нибудь системе может требовать дополнительного специфичного форматирования, переводов. Ну вот пример различия - открытие файла на запись. В винде, например, в текстовом режиме будет ставиться \r\n в конце каждой строки, тогда как такой файл, рассматриваемый потом в лине, будет всё так же содержать эти \r, которых в лине быть не должно. То есть для унификации самого файла между системами в винде файл нужно уже по-другому открывать, чтобы там ничего лишнего не было в итоге. Если будешь всё в одной программе писать, то фактически это будут две отдельные программы, подгружаемые по своим условиям. Вроде так будет всё нормально, но стоит тебе внести изменение в одну программу (добавить фичу или исправить баг), специфичное для её операционной системы, как тут же это изменение запросто зацепит другую программу, потому что у них есть общие части. Общие части живут хорошо, пока не появится такой сюрприз в виде неожиданного бага, который в одной системе глючит вот так, а в другой системе глючит совсем по-другому. Получится, что в одной системе тебе надо эту общую часть одним образом отредактировать, а в другой системе - совсем другим.
Я с этим сталкивался на деле. Очень печально потом сидеть и разделять сначала всё, чтобы просто баг исправить один.

Бывало и так, что баг был только в одной из систем, а код, в котором он был обнаружен, был общим для обеих систем. В итоге и баг исправить надо было, и исправление бага ломало исправный код для другой системы. Как только стало повторяться это несколько раз, пришло понимание, что надо разделить коды. После этого стало всё нормально и разрабатывать стало можно по отдельности для разных систем. Потом просто фичу добавляешь и в одной системе её гоняешь, а для другой системы ничего не надо писать. Когда же коды для двух систем пишутся сразу, то и каждую фичу нужно обязательно для обеих систем подгонять. Это очень затратно по силам: одну фичу добавишь и устанешь, а потом делать уже ничего не хочется. Другое дело, когда можно по отдельности всё делать. Для винды вообще делать ничего не хочется, потому что куча времени уходит на борьбу с глюками винды.



Отредактировано py.user.next (Апрель 20, 2018 01:56:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version