Сделать parted запускать следующий раздел после предыдущего - автоматически?

Во многих местах, в зависимости от

В виртуальных и реальных терминалах переменная среды TERM устанавливается программой, которая связывается с логином и полностью наследуется интерактивной оболочке, которая запускается после входа в систему. Где именно это происходит, варьируется от системы к системе и в зависимости от типа терминала.

Настоящие последовательные клеммы могут различаться по типу в зависимости от того, что находится на другом конце провода. Поэтому обычно программа getty вызывается с аргументом, указывающим тип терминала, или передается программе TERM из данных конфигурации службы диспетчера служб.

  • В системах van Smoorenburg init это можно увидеть в записях / etc / inittab , которые будут читать что-то вроде

     S0: 3: respawn: / sbin / agetty ttyS0 9600 vt100-nav 
    Последний аргумент agetty в этой строке, vt100-nav , - это тип терминала, установленный для / dev / ttyS0 . Итак, / etc / inittab - это место, где можно изменить тип терминала для реальных терминалов в таких системах.
  • В системах systemd это можно увидеть в модульном файле /usr/lib/systemd/system/serial-getty@.service ( / lib / systemd / system / serial-getty @ .service в не объединенных системах), который читает

     Environment = TERM = vt100 
    , устанавливая переменную TERM в среде, переданной в agetty . В этом файле служебной единицы можно изменить тип терминала для реальных терминалов в таких системах. Обратите внимание, что это применимо ко всем реальным терминалам, которые используют этот шаблон служебной единицы. (Чтобы изменить его только для отдельных терминалов, необходимо вручную создать экземпляр шаблона.)
  • В BSD init берет тип терминала из третьего поля записи каждого терминала в / etc / ttys и устанавливает TERM из той среды, в которой он выполняет getty . Итак, / etc / ttys - это место, где можно изменить тип терминала для реальных терминалов на BSD.

Виртуальные терминалы ядра, как вы заметили, имеют фиксированный тип.В отличие от NetBSD, которая может изменять тип виртуального терминала ядра на лету, Linux и другие BSD имеют один фиксированный тип терминала, реализованный во встроенной программе эмуляции терминала ядра. В Linux этот тип соответствует linux из базы данных terminfo. (Эмуляция терминала ядра FreeBSD представляет собой ограниченное подмножество xterm , начиная с версии 9.)

  • В системах, использующих mingetty или vc-get-tty (от nosh package) программа «знает», что она может разговаривать только с виртуальным терминалом, и они жестко подключают «известные» типы виртуальных терминалов, соответствующие операционной системе, для которой была скомпилирована программа.
  • В системах systemd это можно увидеть в модульном файле /usr/lib/systemd/system/getty@.service ( /lib/systemd/system/getty@.service в не объединенных системах), который читает

     Environment = TERM = linux 
    , устанавливая переменную TERM в среде, переданной в agetty .

Для виртуальных терминалов ядра: не изменяет тип терминала. В конце концов, программа эмулятора терминала в ядре не меняется. неверно изменять тип. В частности, это приведет к замораживанию курсора / клавиши редактирования распознавания последовательности CSI. Последовательности CSI linux , отправляемые эмулятором терминала ядра Linux, отличаются от последовательностей CSI xterm или vt100 , отправляемых программами эмулятора терминала GUI в режиме DEC VT.

Эмулятор терминала с графическим интерфейсом пользователя - одна из многих программ, от демона SSH до экрана , использующих псевдотерминалы. Тип терминала зависит от того, какая программа-эмулятор терминала работает на главной стороне псевдотерминала и как она настроена. Большинство эмуляторов терминала GUI запускают программу на ведомой стороне с переменной TERM , значение которой совпадает с их эмуляцией терминала на ведущей стороне. Такие программы, как SSH-сервер, будут пытаться «пройти» через тип терминала, который находится на стороне клиента соединения.Обычно есть какое-то меню или параметр конфигурации для выбора среди эмуляций терминала.

Захватывающая рука

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

Правильный способ - посмотреть, что termcap / terminfo говорит о вашем типе терминала.

colour=0
if tput Co > /dev/null 2>&1
then
    test "`tput Co`" -gt 2 && colour=1
elif tput colors > /dev/null 2>&1
then
    test "`tput colors`" -gt 2 && colour=1
fi

Дополнительная литература

  • Джонатан де Бойн Поллард (2018). СРОК . Руководство по телефону . Программное обеспечение.
1
19.02.2018, 12:43
2 ответа

No tienes que escribir un duplicado exacto de todo lo que hizo un mal script. La reescritura es una oportunidad para arreglar la lógica y el código. Comience por descifrar lo que hace el código original y luego conviértalo en algo sensato.

La respuesta a su pregunta directa es "No. Tendrá que proporcionar el comienzo y el final usted mismo". Afortunadamente, eso no es muy difícil.

El comando mkpartde

partedtoma un argumento starty end(unidades predeterminadas en megabytes ). Solo necesita especificarlos cuando cree las particiones. p.ej. utilizando un archivo de imagen de disco:

$ cat partition.sh 
#!/bin/sh

truncate -s 1G disk.img # create a 1G disk image file

parted -s disk.img mklabel msdos    # create the partition table

# make some partitions
parted -s disk.img mkpart primary 1 100
parted -s disk.img mkpart primary 101 200
parted -s disk.img mkpart primary 201 800
parted -s disk.img mkpart primary 801 1000

parted -s disk.img print

Alternativamente, ejecutar partedsolo una vez:

#!bin/sh

truncate -s 1G disk.img # create a 1G disk image file

parted -s disk.img mklabel msdos \
  mkpart primary 1 100 \
  mkpart primary 101 200 \
  mkpart primary 201 800 \
  mkpart primary 801 1000 \
  print
$./partition.sh 
Model:  (file)
Disk /home/cas/stack-exchange/2018-01-03/pauldsmith/disk.img: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  99.6MB  98.6MB  primary
 2      101MB   200MB   99.6MB  primary
 3      201MB   800MB   599MB   primary
 4      801MB   1000MB  199MB   primary

La parte difícil es calcular los valores iniciales y finales exactos para sus particiones para que estén correctamente alineados para el tamaño del sector. La primera partición es fácil -1 MB se alinea con sectores de 512 bytes y 4K. Cualquier partición que comience en un múltiplo exacto de 1 MB también se alineará correctamente (todas las particiones creadas en el ejemplo anterior están alineadas correctamente ).

Puede usar variables de shell para cualquiera de los valores iniciales y finales de la partición, lo que le permite usar la aritmética de shell para calcularlos (pero recuerde que la aritmética de shell es solo de números enteros -use bco dcsi necesita hacer cálculos de punto flotante -o porcentaje ).

Por cierto, puede verificar la alineación con el comando parted's align-check. p.ej.

$ parted disk.img align-check optimal 1
WARNING: You are not superuser.  Watch out for permissions.
1 aligned

Si align-checkse usa con la opción de modo script -sde parted, no produce ningún resultado. En su lugar, sale con el estado 1 si no está alineado. De lo contrario, continúa con el resto del guión.

partedno tiene ninguna capacidad si/entonces, por lo que si desea automatizar la verificación de alineación -así como la creación de particiones,use la primera versión de la secuencia de comandos anterior para que pueda insertar un comando check-alignentre cada mkparty responder adecuadamente si el código de salida no es -cero.

1
27.01.2020, 23:44

Вы можете использовать partedдля печати конечного сектора:

$ parted /dev/sda 'unit s print'

Number  Start     End       Size      File system  Name     Flags
 1      2048s     1048575s  1046528s  fat32        primary  boot, esp
 2      1048576s  2095103s  1046528s  ext4         primary  raid

Затем следующий раздел начинается с +1 сектора после последнего:2095103s(при условии, что размер предыдущего раздела был указан в правильных единицах ).

(parted) mkpart primary 2095104s 100%

Также вы можете использовать проценты, чтобы оставить расчет самому parted.

0
27.01.2020, 23:44

Теги

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