Файловая система Debian btrfs показывает нулевое количество инодов, ноль используемых, ноль свободных

Este es un protocolo de entrada de teclado que se remonta a la década de 1980, y su shell, no su "controlador de terminal" (lo que sea que se supone que es )como en M. Vazquez -La respuesta de Abrams es no manejarlo correctamente. Es, además, una secuencia de control perfectamente válida.

Fondo

Los terminales emiten secuencias de control para teclas de función y pulsaciones prolongadas de teclas. Pueden emitir secuencias de control DECFNK, que son secuencias de control introducidas por CSI -; Secuencias de control de teclas de función de Linux, que son un tipo diferente de secuencia introducida por CSI -; las secuencias de control de las teclas de función de la consola SCO, que son un tercer tipo de secuencia introducida por CSI -; caracteres individuales desplazados, con el prefijo SS3; o, como en este caso, ECMA -48 secuencias estándar para varias cosas.

(SS3 y CSI son caracteres de control, en el rango C1. Introductor de Secuencia de Control y Turno Único 3.)

Tiene dos teclados particulares en su teclado (IBM Model M -similar o similar ), un teclado de calculadora y un teclado de cursor. El modelo empleado por los emuladores de terminal de estilo DEC VT -(, que es la mayoría de los emuladores de terminal que es probable que encuentre,desde el que está en su kernel hasta Unicode -rxvt )es que ambos teclados tienen modos de aplicación/normal conmutables por separado. Una aplicación TUI de pantalla completa -, algo que usa las bibliotecas libedit o GNU readline (o ZLE )como su shell, y algunos otros tipos de aplicaciones especifican qué modo quieren, y luego escuchan las secuencias de control que vienen desde el terminal leyendo ráfagas de caracteres (con el argumento de que un ser humano no puede escribir una secuencia de control ECMA -48 completa en ningún lugar tan rápido como un terminal o un emulador de terminal envía secuencias de control, por lo que todo lo que viene en una ráfaga es lo que distingue a un usuario que presiona la tecla Esc del emulador de terminal enviando una secuencia de control que comienza con & #x241b; carácter ).

  • En el modo de aplicación, las teclas de flecha en cada teclado producen caracteres individuales desplazados con el prefijo SS3. Los modificadores realmente no pueden tener ningún efecto (a pesar de que XTerm haya estropeado esto )porque ECMA -35 y ECMA -48 definen SS2 y SS3 como si solo actuaran sobre un único carácter siguiente. Pero, por otro lado, los teclados de calculadora y cursor generan diferentes caracteres SS3 -desplazados, lo que permite que los dos teclados se distingan entre sí.
  • En modo normal, las teclas de flecha en cada teclado producen las mismas secuencias de control introducidas por CSI -, y son las de ECMA -48 con aumentos de DEC VT . En particular, las teclas de cursor envían las secuencias de control ECMA -48 CUU, CUD, CUR y CUL (CUrsor Arriba, CUrsor Abajo, CUrsor Derecha y CUrsor Izquierda ). Los aumentos DEC a las secuencias de control ECMA -48 son que la secuencia de control incluye el estado del modificador actual.

Así que uno puede elegir entre el modo de aplicación,donde no se puede saber qué modificadores se presionan pero se pueden distinguir las dos teclas de flecha izquierda, y el modo normal, donde no se puede distinguir entre dos teclas de flecha pero se puede saber qué modificadores se presionan.

Más detalladamente :Los aumentos DEC a ECMA -48 secuencias de control son que la secuencia de control tiene dos parámetros:

  • El primer parámetro es análogo al primer parámetro que realmente puede tener un CUU, CUD, CUR o CUL, según ECMA -48. Es el recuento de ocurrencias y, por lo tanto, siempre es 1.
  • El segundo parámetro es el interesante. Contiene el estado de la tecla modificadora, que (por razones relacionadas con cómo los parámetros en CSI -introdujeron secuencias de control funcionan cuando se omiten )es un conjunto de indicadores de bits para varias teclas modificadoras, más 1, codificado como un número decimal.

Así es como los terminales DEC VT han estado haciendo las cosas desde la década de 1980. En los últimos años, varios emuladores de terminales finalmente introdujeron la misma funcionalidad (aunque, como se mencionó, XTerm se equivocó bastante ).

¿Qué está pasando?.

El problema es que su biblioteca GNU readline, libedit, ZLE, etc. realmente no manejan el protocolo correctamente . Ellos no tienen toda la culpa. Se basan en los sistemas termcap y terminfo, que simplemente no están a la altura del trabajo aquí. termcap y terminfo realmente no tienen la noción de una secuencia de control de entrada que puede variar , y mucho menos varios teclados de modo -.

Para eso, debe mirar a los gustos de Vim, que se puede programar con anulaciones especiales para terminfo para especificar secuencias de control que siguen el protocolo mencionado anteriormente (c.f. :help xterm-modifier-keysen Vim ), o NeoVIM, que usa libtermkey de Paul Evans y su controlador CSI .El controlador CSI de libtermkey es la forma en que uno tiene que manejar la entrada del teclado correctamente desde emuladores de terminal DEC VT -. Es un analizador de máquina de 48 estados ECMA -real que decodifica las secuencias de control correctamente.

Pero lo que está haciendo su shell es buscar entradas para las teclas de flecha en terminfo, y solo hacer coincidir esas secuencias de control específicas .

Específicamente:

  • Su shell está buscando la capacidad kcub1para su terminal en su registro terminfo. Aquí está el de el registro teken, por ejemplo:
    % tput -T teken kcub1|hexdump -C
    00000000  1b 5b 44                                          |.[D|
    00000003
    %
  • Es solo coincidir con esa secuencia de entrada específica como ← Flecha izquierda .
  • Cuando presiona y #x21e7; Nivel 2 Shift + ← Flecha izquierda su emulador de terminal está enviando la secuencia de control CSI1;2D. Más bien, utiliza las alternativas de 7 -bits y envía [1;2D, donde[es la forma de codificar CSI en caracteres de 7 -bits.
  • Su shell no logra comparar eso con ninguna secuencia de entrada fija conocida de terminfo y cancela el procesamiento. En mi caparazón Bourne Again aquí, termina tragando los dos primeros caracteres y actúa como si hubiera presionado ;2D . En su shell Bourne Again, termina tragando los primeros cuatro caracteres y actúa como si hubiera presionado D .

    El modo de falla depende exactamente de qué conjunto de secuencias de entrada está intentando hacer coincidir el patrón, ya que eso determina cuántos caracteres traga antes de determinar que tiene una secuencia sin posibles coincidencias. Esto, por supuesto, depende a su vez de lo que realmente contiene el registro terminfo/termcap de su terminal y qué tipo de terminal le ha dicho a su shell que es su terminal.

Correcciones

La solución local para este tipo de cosas es ser creativo con las combinaciones de teclas en su shell. Esto es porque,por ejemplo, encontrará personas que hacen este tipo de cosas con el shell Z en sus .zshrcs:

bindkey "\e[1;5D" backward-word
bindkey "\e[1;5C" forward-word

Desafortunadamente, no hay una solución local no -. Implicaría rediseñar el manejo de entrada de su shell de manera bastante significativa. Tal rediseño está muy atrasado. (Testigo NeoVIM. )Pero nadie -lo ha abordado todavía.

Lecturas adicionales

2
30.06.2019, 15:20
2 ответа

Как современная файловая система, btrfsвообще не имеет фиксированного ограничения на количество инодов, и поэтому она сообщает об инодах как о нулях.

Проверить состояние btrfsподтомов:

btrfs subvolume list -s /

Если выяснится, что у вас есть моментальные снимки, занимающие место на диске, вам может понадобиться что-то вроде этого, чтобы удалить их:

btrfs subvolume delete -c /.snapshots/NNN/snapshot

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

4
27.01.2020, 22:08

На основании вывода df -iпохоже, что у вас закончились иноды. Когда у вас заканчиваются иноды, вы не можете записывать новые данные, даже если есть свободное место. Ваши решения состоят в том, чтобы либо выяснить, что использует все индексы, либо добавить индексы в существующую файловую систему. Я не знаю, как добавить иноды, но возможно, что если вы используете моментальные снимки btrfs, они потребляют все иноды. Я бы начал искать там и посмотреть, есть ли снимки, которые можно удалить.

0
27.01.2020, 22:08

Теги

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