[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Клонирование ПК



From: "Evheny Khoruzhy" <jek_hor@tut.by>
> > > Имеется задача.
> > > Есть 2 компьютерных класса по 12 компьютеров (Win98) в детском учебном учреждении.
> > > Периодически возникает необходимость записать один образ диска на 12 машин сразу.
> > > Сеть 10 Мб, а время на обслуживание ограничено, так что надо это сделать
> > > за раз. Сейчас используем Symantec Ghost, но хотелось бы попробовать
> > > перевести сервер (P200/128Mb RAM) на Linux.
> >
> > Это как так Symantec Ghost "за раз" все делает? Броадкастом образ шлет,
> > а все 12 машин его ловят? Или просто одновременно 12 сессий по сети одни данные пересылают?
>
> По-моему, он multicasting использует.

В таком случае - решение очень простое. Я когда-то над этой проблемой думал
и вот что надумал.

Во первых, для бэкапа раздела может использоваться tar+bzip2, во вторых - dd+bzip2. Tar кажется предпочтительней, потому как он
позволяет бэкапить только ту информацию, которая
хранится в файлах на разделе, а dd, не зная ничего о структуре файловой системы,
вынужден бэкапить весь раздел, включая мусор на свободном пространстве. Однако, у
tar есть недостатки, такие как незнание атрибутов файлов на файловой системе vfat. О том,
что с восстановлением информации на ntfs-раздел умолчим, так как на машинах стоит win98
и, вероятно, там все таки vfat. dd же позволяет бэкапить раздел, с файловой системой,
о которой Линукс вообще может не знать! Однако, раздувание размера бэкапа - это очень
большой недостаток. И вот как его преодолеть.

Так как мы собираемся сжимать наш бэкап - можно просто забить двоичными нулями
свободное место на диске, причем расположить эти нули в конце диска непрерывным
потоком. В этом случае эти нули очень хорошо сожмутся (не удивлюсь, если ratio этого
куска будет 1:1000 или даже плотнее).

Для осуществления этой процедуры надо выполнить эти шаги:
1) Отдефрагментировать раздел (MS Defrag/Norton Speed Disk).
2) Узнать свободное место на разделе (df /dev/hdaN).
3) Забить его нулями
(dd if=/dev/zero of=/mnt/hdaN/newfile bs=1k count=размер_свободного_места_на_разделе;
sync; rm /mnt/hdaN/newfile)
5) Можно еще забить нулями виндовый своп. Еще много мегабайт сэкономим.

Все, раздел готов к бэкапу. Тут уже все просто. На клиенте
"dd if=/dev/hdaN | bzip2 | netcat ..." , на сервере "netcat ... | dd of=/var/backup/windisk.bz2" .
Можно bzip2 пускать на сервере, если это будет быстрее.

Восстановление. Аналогично. На сервере "dd if=/var/backup/windisk.bz2 | netcat ...",
на клиенте "netcat ... | bunzip2 | dd of=/dev/hdaN". А можно еще проще, и это порядком
упростит восстановление 12 копий. Для этого на сервере поднимаем httpd,
а на клиенте команда приобретает вид
"wget -O- http://server/windisk.bz2 | bunzip2 | dd of=/dev/hdaN". Тогда даже progress
indicator будет.

Замечу, весь этот бэкап/восстановление можно проделывать, загружаясь с дискетки.

Я смотрю, этот вопрос [бэкап/восстановление виндовых разделов] время от времени
таки всплывает. Может, как-нибудь руки дойдут нормальное HOWTO написать...




Reply to: