Как сказать, работает ли система как живой USB от Bash

Создайте диск восстановления, затем используйте live-дистрибутив Linux (например, ubuntu live), чтобы удалить раздел восстановления (и инструменты, если хотите, вы, скорее всего, никогда не будете их использовать), а затем переразбейте и расширенный раздел займет оставшееся пространство с хотя бы одним логическим разделом, отформатированным для выбранной файловой системы (например, ext3, ext4, btrfs), и установите на него Debian.

Логический раздел, который вы используете для Debian, не должен занимать весь расширенный раздел, вам, вероятно, понадобится несколько логических разделов, один из которых вы, возможно, захотите использовать для обмена данными между Windows и Linux. Обычно его называют / shared или / data . На самом деле вам не нужно ничего близкого к 150 ГБ для debian, вы можете выделить большую его часть в свой / shared, если хотите. Вам также может понадобиться своп, обычно рекомендуется ставить его в конце (или в начале, что вы не можете сделать) диска.

1
26.09.2018, 01:11
3 ответа

Вы можете проверить запись для корневой файловой системы в /proc/mounts. Если вы загружаетесь с компакт-диска, вы, вероятно, используете iso9660 в качестве файловой системы и имеете устройство типа /dev/sr0.

Конечно, вы можете просто создать где-нибудь файл как часть установки и использовать наличие этого файла как индикатор.

3
27.01.2020, 23:23

Я обнаружил, что вы можете сделать lsblk | grep 'sr0', и если он обнаружит, что sr0, то, скорее всего, он работает как живой USB. Даже если он на самом деле установлен с подключенным живым USB-устройством, sr0отображается только в том случае, если активное USB-устройство действительно загружено.

0
27.01.2020, 23:23

ОС Linux live (usb или cd )имеет файловую систему, хранящуюся в оперативной памяти, но обычная ОС сохраняет данные в разделе на диске. Мы можем обнаружить эту разницу в bash с помощью двух команд.

  1. Вы можете получить информацию о файловой системе, содержащей ваш домашний каталог, с помощью

    df ~
    

Это даст вам что-то вроде «overlay», «aufs» или «/dev/sda1» (плюс другую информацию)

  1. Вы можете получить список разделов с помощью

    cat /proc/partitions
    

Таким образом, если файловая система, указанная в первой команде, не включена в список разделов из второй команды, значит, вы используете работающую ОС.

Собираем все воедино:

full_fs=$(df ~ | tail -1 | awk '{print $1;}')  # /dev/sda1
fs=$(basename $full_fs)                        # sda1
if grep -q "$fs" /proc/partitions; then
  echo "regular linux install. NOT a live OS"
else
  echo "is a live OS running from RAM"
fi

Обновление!

Файловая система также не будет указана как раздел для контейнеров. Это связано с тем, что таблица разделов, сообщаемая из контейнера, будет разделами основной ОС. Если требуется различать контейнеры и ОС linux live, вам следует добавить еще одно условие:

if cat /proc/1/cgroup | tail -1 | grep -q "container"; then
  echo "linux container"
else
  full_fs=$(df ~ | tail -1 | awk '{print $1;}')  # /dev/sda1
  fs=$(basename $full_fs)                        # sda1
  if grep -q "$fs" /proc/partitions; then
    echo "regular linux install"
  else
    echo "live OS running from RAM"
  fi
fi
1
24.03.2020, 05:19

Теги

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