- Вопрос или проблема
- Ответ или решение
- Безопасный и плавный переход на новое компьютерное оборудование
- 1. Регулярное резервное копирование
- 2. Составление списка установленного ПО
- 3. Упрощение переноса личных данных
- 4. Установка программного обеспечения
- 5. Исключение ненужных файлов
- 6. Восстановление пользовательских настроек
- 7. Защита от вирусов и вредоносного ПО
- Заключение
Вопрос или проблема
Я обычно использую машину A и делаю резервные копии A на файловом сервере B. Рано или поздно я утратю машину A по той или иной причине. Жесткий диск изнашивается, или его поражает молния, или какой-то продавец убеждает меня, что это постыдный кусок устаревшего хлама, или эксперимент с разгонкой идет ужасно неправильно, или происходит “событие, связанное с блестками” и т. д.
Предположим, что компьютер C совершенно отличается от компьютера A — другой интерфейс для магнитных носителей, процессор от другой компании, другое разрешение экрана и т. д.
Существует ли простой способ составить список всего программного обеспечения, установленного на A, до того, как произойдет катастрофа, чтобы было легко установить то же самое программное обеспечение на пустых жестких дисках компьютера C? Или, лучше сказать, чтобы было легко установить последние версии каждого программного обеспечения и конкретную подпись, оптимизированную для этой конкретной машины C?
Если у меня много места на B, то кажется проще скопировать всё с A на B. Если я это сделаю, как правильно разделить файлы, которые я хочу скопировать с B на C, от файлов, которые не хочу? Я не хочу копировать бинарные файлы, которые я могу легко повторно скачать (и, возможно, пересобрать) по мере необходимости, и которые, вероятно, всё равно не будут работать на машине C. Или лучше в долгосрочной перспективе стараться избегать резервного копирования таких легко получаемых бинарных файлов, специфичных для машины, на B с самого начала? Есть ли лучший способ уменьшить шансы на передачу вирусов и троянов на C и их повторную активацию?
Когда я настраиваю программное обеспечение или пишу новое программное обеспечение, какой хороший способ убедиться, что внесенные изменения сохраняются и передаются на новую машину и устанавливаются? Например, задачи cron и anacron?
Что я могу сделать, чтобы сделать свой переход на какой-то новый компьютер C безопасным и гладким?
(Этот вопрос расширяет подпункт вопроса “Инкрементное резервное копирование и восстановление системы с rsync или проблемы с rdiff-backup”, который я считал особенно важным).
$HOME под контролем версий
- Периодически фиксируйте все в каталоге /home в репозитории контроля версий. (Кроме того, всегда выполняйте “make superclean” перед фиксацией каталога $HOME программиста, чтобы он никогда не фиксировал бинарные исполняемые файлы или другие легко сгенерированные машиной файлы).
- Для каждого пользователя, который “владеет” уникальными данными на моем рабочем компьютере, убедитесь, что на моем файловом сервере есть какой-то репозиторий контроля версий, который содержит весь каталог $HOME этого пользователя (“$HOME в subversion”). Даже если я практически единственный человек, который касается этой клавиатуры, у меня есть отдельный пользователь для: ненадежного веб-браузера, который любит устанавливать множество потенциально зараженных вирусами игр; C-программиста, который часто пишет программное обеспечение с ужасными ошибками, и поэтому мы хотим держать его в изоляции в песочнице, где он не может случайно удалить мои любимые закладки в веб-браузере; робот-пользователя, который управляет вики; пользователя root; и т.д.
- держите все “мои” файлы в моем каталоге $HOME, который является рабочим каталогом под контролем версий.
- текстовые файлы, фотографии, файл закладок веб-браузера и т. д. — всё в домашнем каталоге.
- если я пишу пакетный скрипт, который “должен” находиться в каком-то другом подкаталоге, держите мастер-копию где-то в моем каталоге $HOME и сделайте символическую ссылку из этого другого подкаталога на мастер-копию.
- Если я пишу скомпилированное программное обеспечение, которое “должно” находиться в каком-то другом подкаталоге, держите мастер-исходный код и Makefile в каком-то подкаталоге моего каталога $HOME и настройте Makefile так, чтобы “make install” автоматически устанавливала бинарный исполняемый файл в этот другой каталог.
- Если я исправляю ошибки в каком-то программном обеспечении, передавайте исправления ошибок вверх.
- держите список в каком-то текстовом файле в моем каталоге $HOME “приложений, которые мне нравятся и которые не были установлены по умолчанию” и “приложений, которые обычно устанавливаются по умолчанию, но которые мне не нравятся”. См. Как отслеживать, какие пакеты были установлены на Ubuntu (Linux)? или Как отслеживать, какие пакеты были установлены на Fedora (Linux)?
- если я покупаю программное обеспечение на CD или DVD, сделайте резервную копию ISO-образа на моем файловом сервере и установите с этого образа на моем рабочем компьютере. (Потому что на моем рабочем компьютере нет оптического привода).
Позже, когда машина A потеряна,
- установите последнюю версию любой дистрибутив, который мне нравится на этой неделе, включая все стандартное программное обеспечение, на машину C.
- Для каждого пользователя выполните проверку последней версии (HEAD) из контроля версий, пропуская все бинарные исполняемые файлы. Это блокирует некоторые виды вирусов и троянов от распространения на C.
- настройте другие вещи вне моего домашнего каталога:
- проверьте мой список приложений, удалите ненужные.
- проверьте мой список приложений, установите последние версии приложений, которые мне нужны. Надеюсь, что последняя версия включает в себя исправления ошибок, которые я передал. (См. ссылки выше на способы автоматизации этого процесса)
- выполните “make superclean” и “make install” для каждой из скомпилированных программ, которые я написал.
- как-то (?) запомнить, куда “должны” идти пакетные скрипты, и создать символическую ссылку с этого местоположения на мастер-исходник в моем каталоге /home/. (Можно ли это автоматизировать?)
- как-то (?) запомнить все задачи, которые у меня запущены как cron и anacron задания, и снова их ввести.
- установите программное обеспечение, которое было куплено на CD, с ISO-образа на файловом сервере.
- … есть ли еще что-то, что я упустил?
Сначала ознакомьтесь с предыдущими обсуждениями на эту тему: Перенос установки linux на новый компьютер (о случае с одинаковой архитектурой) и Как я могу перенести конфигурацию между компьютерами с различным оборудованием?. Здесь я собираюсь рассмотреть несколько мелких моментов, которые ранее не были рассмотрены.
Если вы переходите на компьютер с той же архитектурой, и ваш диск не вышел из строя, просто перенесите диск в новую машину. Это можно сделать совершенно независимо от переноса данных на больший диск. Обратите внимание, что “та же архитектура” здесь означает тип архитектуры процессора, среди которых в современных ПК только два: x86-32 (также известна как i386, ix86, IA-32 и т. д.) и x86-64 (также известна как amd64, Intel 64 и т. д.). Такие вещи, как конкретный чипсет или вариант процессора, видеоустройства, интерфейсы хранения и т. д., здесь не важны. (Если интерфейс хранения несовместим¹, или если один из компьютеров является ноутбуком, вам придется найти адаптер или копировать через сеть.)
Для резервного копирования в случае сбоя вашего диска (это один из самых хрупких компонентов) у вас есть два варианта:
- Создать побитовую копию всего диска или раздела. Тогда вы сможете восстановить напрямую или даже запустить из резервной копии в экстренной ситуации. Если эта ваша стратегия, вам по-прежнему понадобится файловый инструмент для инкрементных обновлений.
- Резервное копирование ваших файлов. Для восстановления выполните чистую установку, а затем восстановите файлы.
Вашим стандартом должно стать копирование всего, очень мало файлов подлежит изменению, когда вы переходите на новый компьютер. Вам нужно будет переустановить ОС (с большинством современных UNIX), если вы переходите с 32-битного ПК на 64-битный ПК и хотите использовать новый ПК с 64-битной ОС, но иначе любое плохое впечатление, которое вы могли получить от Windows, не переносится на Linux или другие UNIX.
Чтобы упростить гарантии, что ваши данные находятся на каждом используемом компьютере (старом и новом, семейном настольном ПК и вашем персональном ноутбуке и т. д.), убедитесь, что вы настраиваете вещи в своем домашнем каталоге, а не на системном уровне. В Ubuntu или других “дружественных к пользователю” терминах это означает метод настройки, для которого вам не нужно вводить пароль. Но выполняйте настройку на системном уровне, если она сильно зависит от аппаратного обеспечения (например, разрешение экрана).
¹
Это в значительной степени гипотетично. Большинство современных настольных ПК все еще имеют интерфейсы IDE и совместимы со всеми общедоступными внутренними жесткими дисками с конца 1980-х. Вы, конечно, уже обновили все свои ранние ПК.
Предполагая, что вы используете похожий на Debian Linux
-
периодически на машине A выполняйте:
dpkg --get-selections > /mnt/bakup/backup.pkg.lst
и храните файл backup.pkg.lst в безопасном месте
-
Когда случится катастрофа, выполните минимальную установку на машине C (или A) (даже без графического интерфейса) и запустите от имени root:
dpkg --set-selections < /mnt/floppy/backup.pkg.lst apt-get update apt-get dselect-upgrade apt-get dist-upgrade apt-get upgrade
и восстановите свой каталог /home из резервной копии
Все это зависит от того, какую систему управления пакетами использует ваш дистрибутив.
Если вы пользователь debianish, вы можете использовать dpkg, чтобы получить список установленных пакетов.
Пользователи redhatesque могут использовать yum, чтобы получить список
Для FreeBSD вы можете посмотреть в /var/db/pkg для списка установленных пакетов.
жизнь в виртуальной машине
- Настройте виртуальную машину на моем рабочем компьютере. Выполните всю мою настоящую работу в этой виртуальной машине.
- Периодически приостанавливайте виртуальную машину и создавайте резервную копию виртуализированного диска и состояния виртуальной системы на файловом сервере. (Есть ли способ сделать все или большинство этого в фоновом режиме, пока я использую свой компьютер, чтобы мне нужно было приостановить только на время, достаточное для резервного копирования последних нескольких вещей?).
Позже, когда машина A потеряна,
- установите какую-то удобную операционную систему хост на новый рабочий компьютер C.
- установите проигрыватель виртуальных машин на рабочей машине C.
- Скопируйте файл виртуализированного диска и файл состояния виртуальной системы с файлового сервера на машину C.
- Запустите проигрыватель виртуальных машин, чтобы возобновить работу этой виртуальной машины.
Увы, теперь C запускает все вирусы и трояны, которые собрала A — есть ли способ заблокировать хотя бы некоторые из них?
побитовая резервная копия
- Периодически используйте “dd”, чтобы сделать полную побитовую копию раздела /home на моем рабочем компьютере (или, возможно, каждого из разделов) в резервный файл(ы) на моем сервере. (Существует ли способ обновить резервную копию за прошлый месяц с помощью чего-то вроде rsync, чтобы мне не приходилось начинать с нуля каждый раз, ускоряя этот процесс?) (существует ли способ сделать все или большинство этого в фоновом режиме, пока я использую свой компьютер?).
- Положите liveCD в рабочий компьютер и перезагрузите
sudo dd if=/dev/hda | gzip -c | ssh -v -c blowfish davidcary@my_local_file_server "dd of=backup_2011_my_working_computer.gz"
- держите все “мои” файлы в моем каталоге $HOME.
- текстовые файлы, фотографии, файл закладок веб-браузера и т. д. — всё в домашнем каталоге.
- если я пишу пакетный скрипт, который “должен” находиться в каком-то другом подкаталоге, держите мастер-копию где-то в моем каталоге $HOME и сделайте символическую ссылку из этого другого подкаталога на мастер-копию.
- Если я пишу скомпилированное программное обеспечение, которое “должно” находиться в каком-то другом подкаталоге, держите мастер-исходный код и Makefile в каком-то подкаталоге моего каталога $HOME и настройте Makefile так, чтобы “make install” автоматически устанавливала бинарный исполняемый файл в этот другой каталог.
- Если я исправляю ошибки в каком-то программном обеспечении, передавайте исправления ошибок вверх.
- держите список в каком-то текстовом файле в моем каталоге $HOME “приложений, которые мне нравятся и которые не были установлены по умолчанию” и “приложений, которые обычно устанавливаются по умолчанию, но которые мне не нравятся”. См. Как отслеживать, какие пакеты были установлены на Ubuntu (Linux)? или Как отслеживать, какие пакеты были установлены на Fedora (Linux)?
- если я покупаю программное обеспечение на CD или DVD, сделайте резервную копию ISO-образа на моем файловом сервере и установите с этого образа на моем рабочем компьютере. (Потому что на моем рабочем компьютере нет оптического привода).
Позже, когда машина A потеряна,
- установите последнюю версию любой дистрибутив, который мне нравится на этой неделе, включая все стандартное программное обеспечение, на машину C.
- На файловом сервере B используйте “mount” с “loop device”, чтобы предоставить только для чтения доступ к отдельным файлам, хранящимся внутри этого резервного файла. (Для получения дополнительной информации о создании и монтировании только для чтения сжатого дискового образа смотрите https://superuser.com/questions/254261/compressed-disk-image-on-linux )
Увы, номер пользователя “davidcary” на моем рабочем компьютере отличается от номера пользователя “davidcary” на моем файловом сервере — поэтому кажется, что все эти файлы принадлежат какому-то другому пользователю. Есть ли способ это исправить или предотвратить это с самого начала?
- скопируйте мой каталог /home/ из этого резервного файла в каталог /home/ на моей новой рабочей машине, как-то (?) пропуская все бинарные исполняемые файлы. Это блокирует некоторые виды вирусов и троянов от распространения на C.
- настройте другие вещи вне моего домашнего каталога:
- проверьте мой список приложений, удалите ненужные.
- проверьте мой список приложений, установите последние версии приложений, которые мне нужны. Надеюсь, что последняя версия включает в себя исправления ошибок, которые я передал. (См. ссылки выше на способы автоматизации этого процесса)
- выполните “make superclean” и “make install” для каждой из скомпилированных программ, которые я написал.
- как-то (?) запомнить, куда “должны” идти пакетные скрипты, и создать символическую ссылку с этого местоположения на мастер-исходник в моем каталоге /home/. (Можно ли это автоматизировать?)
- как-то (?) запомнить все задачи, которые у меня запущены как cron и anacron задания, и снова их ввести.
- установите программное обеспечение, которое было куплено на CD, с ISO-образа на файловом сервере.
- … есть ли еще что-то, что я упустил?
Прошло более 13 лет после вопроса OP, и я убежден, что ответ — “вы не можете”.
Фрагментация экосистемы Linux делает невозможным наличие одного решения, которое бывает надежным для каждого дистрибутива. Но также я не знаю ни одного дистрибутива, где переход на новое аппаратное обеспечение может быть выполнен “безопасно и гладко”. Полная перенастройка и переустановки всегда будут необходимы, поскольку могут возникнуть несовместимости драйверов.
Linux не может предложить эту функциональность в отличие от других платных ОС по многим причинам, в основном потому, что будучи бесплатным и разработанным сообществом, он имеет глубокую фрагментацию (т.е. тысячи независимых версий всего), и поддержка/совместимость драйверов не всегда общая или гарантированная.
Ответ или решение
Безопасный и плавный переход на новое компьютерное оборудование
Переход на новое компьютерное оборудование может быть сложной задачей, особенно если вы используете различное программное обеспечение на старой машине. Чтобы минимизировать риски и повысить эффективность этого процесса, следуйте данным рекомендациям.
1. Регулярное резервное копирование
Создание резервных копий вашего рабочего компьютера (машины A) на файловом сервере (машина B) — это первый и один из самых важных шагов. Регулярные резервные копии обеспечат защиту ваших данных в случае ошибок в оборудовании или программном обеспечении. Используйте такие инструменты, как rsync
или dd
для создания полных образов дисков или отдельных папок:
-
Для выполнения битового резервного копирования:
sudo dd if=/dev/sdX | gzip | ssh user@backupserver "dd of=/path/to/backup.img.gz"
-
Или, для резервного копирования директорий:
rsync -av --progress /path/to/source user@backupserver:/path/to/destination
2. Составление списка установленного ПО
Перед потерей компьютера A полезно составить полный список установленного программного обеспечения. Для пользователей дистрибутивов на базе Debian это можно сделать с помощью команды:
dpkg --get-selections > /mnt/backup/installed_packages.lst
Этот файл можно использовать для установки всех пакетов на новую машину C, запустив команды:
dpkg --set-selections < /path/to/installed_packages.lst
apt-get update
apt-get dselect-upgrade
3. Упрощение переноса личных данных
Сохраняйте все ваши данные в домашней директории ($HOME
). Размещайте текстовые файлы и программный код в каталоге, который находится под контролем версионного контроля (например, Git или SVN). Таким образом, вы сможете легче отслеживать изменения и переносить их на новую машину.
- Рекомендуется создать резервные копии важных файлов с помощью
git
:cd ~/projects git init git add . git commit -m "Initial backup"
4. Установка программного обеспечения
Когда машина C окажется в вашем распоряжении, установите на ней свежую версию операционной системы с основным программным обеспечением. Следуя списку, который вы создали ранее, установите необходимые пакеты на новом компьютере, чтобы обновить свое окружение.
5. Исключение ненужных файлов
Не следует копировать бинарные файлы, которые могут не работать на новой машине из-за различий в архитектуре. Чтобы избежать передачи вирусов и программного обеспечения с ненадежных источников, используйте фильтры для исключения таких файлов. Во время резервного копирования можно использовать команды, чтобы не включать определённые типы файлов.
6. Восстановление пользовательских настроек
При переходе на новую систему обязательно перенесите пользовательские настройки, такие как скрипты cron и специальные настройки программ. Запишите список необходимых для запуска задач и выполните их настройку на новом оборудовании.
-
Для резервного копирования содержимого cron используйте:
crontab -l > mycron
-
Для восстановления:
crontab mycron
7. Защита от вирусов и вредоносного ПО
Чтобы снизить риск переноса вредоносного ПО, рекомендуется использовать антивирусные программы и проводить проверку файлов перед их переносом. Перед установкой переносимого программного обеспечения обновите антивирусные базы данных.
Заключение
Тщательная подготовка, регулярное резервное копирование и хорошая организация данных существенно облегчит переход на новое оборудование. Применение перечисленных выше рекомендаций поможет вам сделать этот процесс безопасным и плавным, обеспечивая уверенность в том, что все ваши данные и программу будут доступны на новой машине.