Страница 1 из 2

dd | gzip

Добавлено: 21 окт 2005, 10:29
Lioxa
Может ли кто-нибудь подсказать, как можно обнулить свободное место на диске?

О бъясняю:
dd if=/dev/hdd1 | gzip --best > /home/bak/hdd1.gz
Раздел 102М, файлов на нём в пределах 10М. После сжатия получается 101М. В чём дело - понятно. На разделе лежат остатки старых фалов, но они не прописаны в фаловой системе, но dd их читает. dd не может их игнорировать, иначе ему придётся знать все файловые системы. А что бы нормально сжать, нужно всё свободное место затереть "0". Так вот как можно это сделать?

Добавлено: 21 окт 2005, 10:45
slavaz
А чем tar czvf tarfile.tar.gz <...> не угодил?
Чем обоснованно использование dd?

Добавлено: 21 окт 2005, 10:51
Lioxa
slavaz писал(а):А чем tar czvf tarfile.tar.gz <...> не угодил?
Чем обоснованно использование dd?
Тем, что hdd1 - это раздел на котором я эксперементирую, изучая команды, подобные dd. А сама команда необходима для создания резервных копий дисков (например CD/DVD), на которых может быть записана инфа, не прописаная в файловой системе. В таком случае конечно затирать нельзя, да и не получится, а для веников - нада. Делаю скипт для себя, что бы быстро бэкапить любой диск/раздел, а потом востанавливать. Универсальный скрптик.... А то надоело переставлять винду в офисе... Сделал бэкап, а потом за несколько минут (зависит от размера бекапа конечно же) восттонавливать систему...

Добавлено: 21 окт 2005, 11:43
slavaz
как затереть нулями свободное место, не трогая файлы, я не знаю. Но если очень нужно сделать, то:
tar czvf tarfile.tar.gz /mnt/hdd_disk
затем umount /mnt/hdd_disk, dd if=/dev/zero of=/dev/<hdd_disk>
ну и mkfs.<чего нужно> /dev/<hdd_disk>
и затем подмонтировать раздел, развернуть в точку монтирования архив и снять через dd.
Впрочем, на Свежем Мясе (freashmeat.net) как-то краем глаза видел утилитку, которая "удаляет удалённое", перезаписывая нулями свободное место...
Два пути: первый, описанный мною, и второй - поискать на freshmeat.net

Кстати, насколько я понял, dd Вам нужен для, скажем, сохранения boot-области (или MBR) диска. Обычно бутобласть находится на корневой партиции (/boot нонче редко выносят по умолчанию на отдельный раздел). Так вот, нельзя натравливать dd на подмонтированный раздел. в крайнем случае
mount /dev/<hdd_disk> -o remount,ro
перед дампированием; и rw перемонтирование после процесса. Процесс может быть долгим, поэтому по сути комп (и юзверь за компом) будут отдыхать на перекуре. Если dd хотите делать на сервере - сразу забудьте. tar Вам в руки :-) Тем более, что tar как раз и предназначен для архивации: Tape ARhiver, однако :wink:

Добавлено: 21 окт 2005, 13:49
Victor Gr.

Добавлено: 21 окт 2005, 19:24
exe
Примерно так, и посмотри man dd на размер

dd if=/dev/zero of=filename
rm filename

Добавлено: 22 окт 2005, 13:52
Serj
exe, помоему задача-то не в обнулении мест в которых лежат конкретные файлы с последующим их удалением и не в обнулении всего раздела,
а в обнулении свободного места не занятого файлами в котором лежит мусор от хранившихся ранее файлов. И этот мусор приводит к плохим результатам компрессии раздела как единого файла.
Или я не прав?
Т.е. алгоритм примерно такой:
Нужно пройти по всем блокам раздела, выясняя принадлежат ли они какому-нибудь файлу или нет. Если принадлежат - нифига с ними не делать. Если не принадлежат никакому файлу - залить нулями.

Добавлено: 22 окт 2005, 15:20
myst
Так напиши! А потом ещё для нескольких FS добавишь поддержку и вообще будет клёво.

Добавлено: 22 окт 2005, 16:51
Serj
Ага, если честно, такая мысля возникла. Задачка довольно интересная в качестве треннинга программирования под Linux, для начала хотя бы под одну ФС.
Вот тока ща кто-нибудь скажет, что такая тулза уже есть и нефиг изобретать велики :D

Добавлено: 22 окт 2005, 18:51
Lioxa
Serj писал(а):Вот тока ща кто-нибудь скажет, что такая тулза уже есть и нефиг изобретать велики :D
А это не будет изобретением велосипеда. Это будет вклад в развитие данной темы... ;) Ведь всегда можно сделать лучше...

Добавлено: 23 окт 2005, 01:28
exe
Serj, я считаю что ты неправ :-)

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

а лучше надо делать только если не устраивает то что есть.
Или если хочешь изучить.

Добавлено: 24 окт 2005, 10:04
Serj
exe, согласен :)

Добавлено: 25 окт 2005, 14:02
Lioxa
exe писал(а): то что я предложил выполняет именно ту задачи что ты хотел
сделать.
Поправка: я хотел... :)
exe писал(а): Новый файл будет заполнен нулями, и удален. После этого
на диске всё свободное место будет записано нулями. gzip всё
прекрасно запакует и размер будет небольшой. Просто размер
файла должен быть равен свободному месту на диске.
Свободные кластеры будут обнулены - это точно. А вот остатки кластероов будут по прежнему забиты левыми байтами. Твой метод хорошо, но не на 100%. пость потеря будет и не большой, но она будет. А интересно сделать, что бы всё свободное место было "0".

Добавлено: 26 окт 2005, 10:20
Serj
А что значит - остатки кластеров?

Добавлено: 26 окт 2005, 11:23
Lioxa
Serj писал(а):А что значит - остатки кластеров?
Пусть у тебя кластер=512К.
Файл=1200К.
Тогда он займёт 2 кластера полностью и 1200-1024=166 байт третьего. Остаток третьего кластера=512-166=466 байт. Третий кластер принатдлежит файлу, и при записи нового файла (например в случае обнуления фалом к говорилось раньше) запись начнётся с 4-го кластера, а 466 байт остануться не использованными. Если у тебя много маленьких фалов, то это становится существенно. К тому же Ос считает общий размер по сумме размеров файлов, а не по сумме занимаемых кластеров, хотя в конце может дописать, что фактически занимаемое место=...