From: "Evheny Khoruzhy" <[EMAIL PROTECTED]> > > > Имеется задача. > > > Есть 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 написать...