Какова была бы производительность системы Linux при последовательном подключении нескольких жестких дисков USB на концентраторах USB?

Исправлено !.

Предпринятые шаги

1.

root@localhost james]# umount  -v /dev/sdf2
umount: /run/media/james (/dev/sdf2) unmounted

2.

cd /run/media/james

3.

мкдир МЕДИА

4.

vi /etc/fstab

5.

Отредактировал fstab с

/dev/sdf2             /run/media/james/MEDIA    ntfs-3g   defaults  0 0

6.

mount  /dev/sdf2

Большое спасибо сообществу CENTOS !

35
23.08.2011, 16:56
8 ответов

Просто для записи, вот ответ на эту проблему (Usenet выиграл):

Консольные приложения, работающие внутри виртуальных терминальных приложений (xterm, rxvt и другие) получат SIGWINCH после операции изменения размера. Таким образом, приложение сможет перерисовать окно и т.д. в соответствующем обработчике сигнала.

К сожалению, при использовании последовательной консоли такого механизма нет.

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

Этого можно достичь, сначала скомпилировав специальный исполняемый файл resize, а затем используя следующее в bashrc:

if [ $(tty) == '/dev/ttyS0' ]; then
  trap resize DEBUG
fi

Конечно, это не изменит настройки размера консоли в консольном приложении во время выполнения.

16
29.04.2021, 00:59

Вот еще одно решение, которое отлично сработало на моей встроенной Linux-системе (Overo под управлением Angstrom). Я просто запустил его из своего файла .bashrc. Я не хотел использовать resize, потому что это требует установки некоторых пакетов X, а я этого не хотел.

Сообщаем Raspberry Pi, что ваш терминал больше 24 строк | Shallow Thoughts Blog

3
29.04.2021, 00:59

Терминалы с изменяемым размером как таковые являются результатом NAWS ( Согласование размера окна из RFC 1073 Telnet Параметр размера окна ).

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

Если терминал может согласовать размер, компьютер отправит SIGWINCH приложениям, работающим в терминале, сообщая им обновить свое представление о размере экрана.

Когда компьютеру неизвестен размер экрана, он обычно устанавливает размер, показанный в stty -a (строки и столбцы), равным нулю. Для интерактивного использования это немного недружелюбно, и некоторые системы используют переменные среды LINES и COLUMNS , чтобы помочь. Присвоенные значения могут быть получены из описания терминала; чаще они просто жестко запрограммированы. Соглашение для этих переменных требует, чтобы они действовали, если они явно не подавлены, например, в функции curses applications use_env . С положительной стороны, эти переменные могут быть полезны при отсутствии достоверной информации. С другой стороны, нет удобного метода для изменения этих переменных.

Программа resize (служебная программа, поставляемая с xterm ) может использовать escape-последовательность отчета о положении курсора в стиле VT100 для определения размера экрана. Это можно запустить из командной строки; (опять же) нет удобного способа сделать это автоматически. В качестве побочного эффекта resize обновляет информацию о строках / столбцах, которую видит stty . Его использование для предоставления обновленных переменных среды в основном полезно для таких случаев, как этот, где СТРОКИ и СТРОКИ установлены и должны быть обновлены.

11
29.04.2021, 00:59

Как и комментаторы, упомянутые до меня, нет альтернатива вызову resize после каждой команды, если у вас нет этой команды и вы не хотите устанавливать пакет там, где он находится ( xterm ), вот две оболочки POSIX скрипт, который делает то же самое с использованием управляющих кодов терминала ANSI:

res() {

  old=$(stty -g)
  stty raw -echo min 0 time 5

  printf '\0337\033[r\033[999;999H\033[6n\0338' > /dev/tty
  IFS='[;R' read -r _ rows cols _ < /dev/tty

  stty "$old"

  # echo "cols:$cols"
  # echo "rows:$rows"
  stty cols "$cols" rows "$rows"
}

res2() {

  old=$(stty -g)
  stty raw -echo min 0 time 5

  printf '\033[18t' > /dev/tty
  IFS=';t' read -r _ rows cols _ < /dev/tty

  stty "$old"

  # echo "cols:$cols"
  # echo "rows:$rows"
  stty cols "$cols" rows "$rows"
}

Кстати, в моем .profile вы найдете следующее: [$ (tty) = / dev / ttyS0] && res , чтобы размер терминала определялся для каждого войдите в систему через последовательную линию (ту, которую я использую для управления), например после перезагрузки устройства.
См. Также идею rsaw в комментариях, чтобы вместо нее была строка [$ (tty) = / dev / ttyS0] && trap res2 DEBUG поэтому изменение размера выполняется после каждой команды (обратите внимание, что AFAIK это не всегда или не всегда возможно на busybox ).

34
29.04.2021, 00:59

Cuando se ejecuta una sesión de shell a través de una línea serie, basta con llamar al comando resizedentro de esa sesión -después de establecer la conexión y después de cada cambio de geometría del terminal.

El comando resizees parte de xterm pero no depende de X11. Por ejemplo, en Fedora se empaqueta por separado como xterm-resize.

Cómo funciona :el comando de cambio de tamaño mide el alto/ancho a través de algunos movimientos del cursor y luego envía esos valores a la terminal a través de secuencias de escape.

Con un shell como zsh, esto también actualiza automáticamente las variables LINESy COLUMNS(alternativamente, uno puede evaluar las declaraciones de exportación que los comandos imprimen en stdout ).

Por qué esto es necesario :con una sesión local o ssh, el terminal puede señalar la sesión sobre cambios de geometría (cf. SIGWINCH ). Este mecanismo no funciona a través de una conexión en serie.

1
29.04.2021, 00:59

Вот простая и быстрая функция изменения размера, которая работает только для bash. Он модифицирован по сравнению с res2 phk, используя read -d delimbash, чтобы не допустить завершения чтения по тайм-ауту.

resize() {
  old=$(stty -g)
  stty -echo
  printf '\033[18t'
  IFS=';' read -d t _ rows cols _
  stty "$old"
  stty cols "$cols" rows "$rows"
}
2
29.04.2021, 00:59

В то время как команда resizeработала для меня,(sttyманипуляции были ужасно медленными ), по-видимому, resizeв DEBUGловушка испортила каналы оболочки (, например.ls | sort -u).

Вот решение, которое я в итоге использовал. Он запускается resizeпосле приглашения, но перед первой командой в канале.

Обратите внимание, что мы не можем просто поместить resizeв PROMPT_COMMAND, потому что он запускается при выводе подсказки. То есть это не сработало для моего рабочего процесса на основе Vim "^Z+ fg" -.

.

  1. Изменение размера окна пользовательского интерфейса в Vim
  2. ^Z(приостановить задание)
  3. PROMPT_COMMANDвыполняет и активирует хук DEBUG.
  4. Иногда снова настраивайте размер пользовательского интерфейса. Именно поэтому я не могу использовать PROMPT_COMMANDв одиночку.
  5. Введите fgили ls | catи нажмите Enter.
  6. DEBUGловушка срабатывает один раз и отключается до следующей подсказки.
if [ "$(tty)" == /dev/ttyS0 ]; then  
        # Run resize only after prompt so that we don’t
        # mess up pipes and other things.
        debug_hook_resize() {
                if [ -n "${debug_hook_prompt+x}" ]; then
                        unset debug_hook_prompt
                        resize >/dev/null
                fi
        }
        prompt_hook_resize() {
                debug_hook_prompt=
        }
        PROMPT_COMMAND=prompt_hook_resize
        trap debug_hook_resize DEBUG
fi
1
29.04.2021, 00:59

Улучшение ответа Свена Геггуса:

This can be achieved by first compiling a special resize executable and then using the following in bashrc

Простое перенаправление вывода заставляет команду gnu resizeработать. Просто добавьте следующее в свой.bashrc:

alias rsz='resize >/dev/null'
if [ $(tty) == '/dev/ttyS0' ]; then
  trap rsz DEBUG
fi

Другими словами, вам не нужна специальная команда resize.

0
29.04.2021, 00:59

Теги

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