Как мне запустить свою систему только на виртуальном диске после входа в систему (или, возможно, при загрузке)?

Я знаю, как создавать одноразовые RAM-диски, но не знаю, как сделать следующее:

  • настроить среду разработки с использованием традиционного постоянного хранилища
  • при следующей загрузке, у меня есть возможность вставить мою домашнюю папку на RAM-диск (или во всю систему)
  • , потому что среда разработки была предварительно сконфигурирована, меня не волнует, потеряется ли RAM-диск во время перезагрузки или питания. отказ. Поскольку я регулярно использую git, единственное дополнительное постоянное хранилище, которое мне нужно, - это git.

Я понимаю, что для этого потребуется много оперативной памяти, но есть физические ограничения, как это можно настроить?

0
задан 23 February 2020 в 00:22

2 ответа

Вы можете полностью разместить свою среду в ОЗУ, но:

  • Ничего не будет постоянным!
  • Вам потребуется ОЗУ размером с твердотельный накопитель: 64 ГБ будет мало, 128 ГБ будет удобно

Возможность 1: Вся система в ОЗУ:

  1. Установить Ubuntu на USB-накопитель ¹
  2. Преобразуйте USB-накопитель¹ в файл ISO с помощью дисков Gnome
  3. Добавьте файл ISO в grub
  4. Загрузите этот файл ISO

Вот! Окружение полностью в ОЗУ!

Возможность 2: / home в ОЗУ:

  1. Создать RAM-диск
  2. Нормальная загрузка
  3. Rsync все / home в RAM-диск
  4. mount bind RAM-диск к / home
  5. При выключении вы либо теряете все, что находится на RAM-диске, либо вам нужно делать в обратном порядке # 3

Так что все, что технологически возможно , но непрактично , так как:

  • вам необходимо выполнять все обновления / системные настройки на постоянном USB-накопителе¹ и конвертировать в ISO каждый раз, когда вы хотите изменить один постоянный байт. (Вы хотите, чтобы в вашей среде IDE была включена одна опция? Ну ... Включите ее и заново создайте ISO ... )
  • Это требует огромного количества оперативной памяти, так как вам нужна вся ваша диск или вся домашняя среда в ОЗУ и достаточно ОЗУ для запуска необходимых вам приложений.
  • Вам необходимо rsync данных, которые вы хотите сохранить.
  • Время, которое вы потеряете при выполнении вышеуказанного, перевесит выгоду, которую вы получите.

Примечание 1: Я использую в качестве примера USB-накопитель, он также может быть разделом / диском на вашем ПК, но USB-накопитель упростит задачу, так как вы также можете скопировать USB-накопитель на другой USB-накопитель. придерживаться резервной копии этой среды.

9
ответ дан 25 February 2020 в 13:42

Я работаю над двумя решениями для моей команды, которой нужно использовать GIMP в Ubuntu. В вашем случае GIMP будет заменен набором инструментов разработчика.

(Примечание: в вашем случае, если вы хотите сохранить содержимое RAM-диска, вам придется использовать предложения Fabby и Zeiss, и вам больше не нужно монтировать / tmp и / var / tmp описывается ниже как RAM-диск)

Проблемы, которые я решаю:

  1. Не оставляйте никаких следов файлов, обрабатываемых каким-либо из приложений. (В моем случае по той же причине я отключаю своп). Некоторым инструментам разработчика может потребоваться большая память, поэтому вам, возможно, придется действительно подумать, сколько оперативной памяти вам действительно понадобится.
  2. Некоторые программы могут использовать / var / tmp и / tmp в дополнение к домашнему каталогу. Никаких следов не должно оставаться ни в одном из этих файлов без явного отключения липкого бита в этих каталогах (иначе некоторые программы могут сломаться)
  3. Система всегда должна предоставлять чистый образ домашнего каталога - поэтому даже изменения конфигурации не сохраняются.
  4. Обычный пользователь не должен иметь прав sudo .
  5. Должен работать для всех программ с графическим интерфейсом, поддерживаемых дистрибутивом, без каких-либо взломов (иначе я бы просто использовал образы Docker). Решение также должно быть реализовано в любом дистрибутиве Linux без специальных хаков. Он должен быть установлен и управляем L1 Sys Admin.
  6. Пользователь с правами администратора должен иметь возможность обновлять систему по мере необходимости.

Решение 1. В соответствии с предложением Fabby в разделе «Возможность 2 (низкая сложность)»

  1. Создайте две учетные записи: первая - это учетная запись по умолчанию, созданная во время установки дистрибутива (в Ubuntu обычно это учетная запись имеет права sudo ). Скажем, учетная запись по умолчанию admin , а домашний каталог - / home / admin , а вторая учетная запись, скажем, developer , а домашний каталог установлен как / ramdisk . При создании второй учетной записи убедитесь, что она не создает домашний каталог. Учетная запись разработчика не должна иметь прав sudo . пароль учетной записи root должен быть заблокирован, чтобы не было соблазна использовать su при работе под учетной записью разработчика . Если вы крайне параноик, вы хотели бы использовать chroot для разработчика и не сохранять программы с set-uid в chrooted каталоге.

  2. Протестируйте все (например, установите .gitconfig , gitignore , .bashrc и несколько других файлов конфигурации), пока все не будет работать нормально. Убедитесь, что TMPDIR = / ramdisk / tmp установлен в .bashrc , поэтому даже временные каталоги могут быть созданы на большом RAM-диске теми программами, которые поддерживают TMPDIR .

    После тестирования отключите функцию автоматического обновления в соответствии с инструкциями, применимыми к вашему дистрибутиву.Это необходимо, потому что я также рекомендую монтировать / tmp и / var / tmp на RAM-диск минимально возможного размера (см. 5 ниже), и ваши программы автоматического обновления могут в конечном итоге испортят вашу систему.

  3. Скопируйте / home / admin в отдельный каталог, скажем, в / var / inventory / devtools-home . Удалите все, что явно не требуется как часть исходного образа из / var / inventory / devtools-home , чтобы сохранить его как можно меньше. Создайте ZIP-файл / var / inventory / devtools-home - образ домашнего каталога.

  4. Добавьте запись в / etc / fstab для RAM-диска ( tmpfs ) необходимого размера, смонтированного на / ramdisk , и смонтируйте параметры как uid = developer, gid = developer, mode = 700, default, noatime, nodev, nosuid, noexec .

  5. Обновите / etc / fstab , чтобы смонтировать / tmp и / var / tmp как tmpfs , если ваш дистрибутив не использует ОЗУ диск для этих каталогов. (Я стараюсь, чтобы он был как можно меньше).

  6. Добавьте задание cron с помощью @reboot , чтобы распаковать образ домашнего каталога разработчика в / ramdisk и chown -R developer.developer / ramdisk . Вы можете использовать службы загрузки или эквивалент rc.local , поддерживаемый вашим дистрибутивом.

  7. Перезагрузитесь и все протестируйте. Для нормальной работы авторизуйтесь как разработчик . Перезагрузите компьютер, и все следы будут потеряны, и вы снова получите новую копию домашнего каталога с его конфигурацией по умолчанию.

  8. Если вам нужно выполнить обновления или добавить новые инструменты, войдите в систему как admin , отключите / tmp и / var / tmp , выполните обновления, а затем перезагружаем сервер. Если вы хотите изменить настройки по умолчанию в домашнем каталоге, выполните шаги (2) и (3) выше и создайте новый образ домашнего каталога.

Решение 2. Центральный загрузочный сервер PXE (Высокая сложность по сравнению с решением выше)

(в настоящее время я работаю над этим решением, поэтому все шаги могут быть неточными)

Решение 1 хорошо для одноразовой машины. Если вы хотите создать целую среду для нескольких рабочих столов в локальной сети, описанное выше может оказаться слишком громоздким для управления. Однако вы не хотите терять возможности использования высокоскоростного процессора и большого объема оперативной памяти современных настольных компьютеров. В таком случае рекомендуется использовать центральный сервер загрузки PXE вместо центрального сервера терминалов. Не вдаваясь в подробности, вам понадобится следующее:

  1. Центральный сервер Linux с TFTP, DHCP, NFS, центральный сервер системного журнала и службы LDAP.
  2. Настройте службу LDAP с необходимыми учетными записями / группами.
  3. Настройте TFTP для обслуживания ядра Linux на рабочем столе и смонтируйте корневой раздел в режиме «только чтение» через NFS, который будет иметь образ вашего дистрибутива и необходимые инструменты разработчика. Смонтированный образ NFS также должен быть настроен для аутентификации через LDAP. Вам также потребуется смонтировать / etc как отдельный раздел / каталог для каждого устройства из-за возможности другой конфигурации дисплея.
  4. Используйте бездисковые рабочие столы с высокоскоростным процессором и большим объемом оперативной памяти. Настройте BIOS рабочего стола для использования загрузки PXE.
  5. Убедитесь, что RAM-диск требуемой конфигурации создан на рабочем столе и что домашний каталог смонтирован на RAM-диске, а домашний образ скопирован, как описано в решении 1. Системный журнал, запущенный на рабочем столе, должен отправлять системные журналы на центральный сервер системного журнала.
  6. Проверяйте все.
  7. Если вы хотите выполнить обновление, обновите образ на основе NFS с помощью необходимых инструментов разработчика, обновите этот образ на центральном сервере и перезагрузите рабочие столы. (Я предпочитаю сохранять последний и текущий образ, чтобы в любой момент я мог вернуться к старой версии, если в новых обновлениях будет сообщено о какой-либо проблеме).
4
ответ дан 27 February 2020 в 19:37

Другие вопросы по тегам:

Похожие вопросы: