О переменной Xauth и DISPLAY

Я столкнулся с этим при попытке заменить диск на один немного меньшего размера. Я получал эту ошибку даже после изменения размера файловой системы на исходном диске. Поскольку я использовал целые диски, у меня не было возможности изменить размер раздела. Хитрость заключалась в том, чтобы передать dev для исходного диска вместо пути к устройству. Похоже, это привело к тому, что btrfs filesystem replaceпроверил фактический размер файловой системы на исходном устройстве, а не размер самого устройства.

Мое исходное состояние:

# btrfs fi show /mnt/storage
Label: 'Storage'  uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Total devices 5 FS bytes used 15.25TiB
    devid    1 size 7.28TiB used 3.84TiB path /dev/sdb
    devid    2 size 7.28TiB used 3.84TiB path /dev/sdc
    devid    3 size 7.28TiB used 3.84TiB path /dev/sdd
    devid    4 size 7.28TiB used 3.84TiB path /dev/sde
    devid    5 size 7.28TiB used 3.84TiB path /dev/sdf

Я хотел заменить /dev/sdf на /dev/sdg.

Попытка #1:

# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)

Изменение размера файловой системы в /dev/sdf (devid 5):

# blockdev --getsize64 /dev/sdg 
8001546444800

# btrfs fi res 5:8001546444800 /mnt/storage
Resize '/mnt/storage' of '5:8001546444800'

Попытка #2:

# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)

Без изменений. Он появляется при указании источника как блочного устройства, replaceсмотрит только на размер блочного устройства при проверке, достаточно ли места на приемнике. Однако, просматривая исходный код, я обнаружил, что replaceобрабатывает исходный раздел по-разному и фактически получает правильный размер из файловой системы.

Это привело к попытке #3:

# btrfs replace start 5 /dev/sdg /mnt/storage

Эта формулировка в сочетании с предыдущим изменением размера позволила успешно запустить операцию замены.

1
02.10.2020, 00:46
1 ответ

Переменная среды DISPLAYсообщает приложению, как подключиться к серверу X . X-сервер — это часть системы, которая отображает окна на экране. Дисплей — это то, на чем могут отображаться окна.

Система unix может иметь несколько дисплеев, например, на нескольких виртуальных консолях , или на нескольких реальных консолях , или поскольку некоторые дисплеи являются виртуальными , или потому что доступ к некоторым дисплеям осуществляется по сети. ssh -Xперенаправляет соединение на удаленный дисплей по сети.

Каждый дисплей имеет номер. Эти цифры предназначены только для того, чтобы отличить дисплеи друг от друга. :0— номер дисплея 0, :1— номер дисплея 1 и т. д. Один из способов использования номера дисплея — это то, как он позволяет приложениям подключаться к X-серверу. :он используется для вычисления имени файл сокета (/etc/.X11-unix/X0, … )или номер TCP-порта (6000 плюс номер дисплея ), который прослушивает X-сервер.

Часть .0после номера дисплея является устаревшей концепцией. Это номер «экрана», где дисплей может состоять из нескольких экранов, а окно привязано к конкретному экрану. В современных системах X-сервер представляет собой один экран и позволяет окнам приложений перемещаться между мониторами. :NUMBERэквивалентно :NUMBER.0.

Перед двоеточием может стоять имя машины. Это обеспечивает TCP-связь между приложением и X-сервером. Эта коммуникация не защищена от сетевого слежения и вмешательства -в -в -посреднике, поэтому в реальных сетях она в основном не рекомендуется, но в некоторых случаях может быть полезна.например, в сети между виртуальными машинами, работающими на одном хосте. На практике, если оба работают, localhost:NUMBERфункционально эквивалентен :NUMBER(, но :NUMBERможет использовать под капотом более быстрый механизм связи, и возможно, что только один из них будет работать, потому что не все X-серверы прослушивают как локально, так и локально. через TCP; даже технически возможно, чтобы разные серверы прослушивали localhost:NUMBERи :NUMBER, но это было бы где-то неправильной конфигурацией ).

Объект, создающий отображение X, должен выбрать номер отображения. (Это можно сделать, позволив серверу принять решение, но в этом случае ему необходимо выяснить, какой номер выбрал сервер, чтобы установить DISPLAYдля приложений. )Большинство программ выбирают наименьшее доступное число или число, жестко -закодированное в каком-либо файле конфигурации. Чтобы оставить место для физических дисплеев, SSH выбирает только числа, начинающиеся с 10.

Как правило, неправильно задавать DISPLAYвручную, потому что только тот объект, который создает отображение, может выбрать номер. Например, в случае ssh -Xэто сам SSH. Если вы установите DISPLAYвручную, вы можете получить неправильное число или объявить несуществующий дисплей (, например, если в пересылке X11 было отказано ).

Другие пользователи или пользователи других компьютеров могут попытаться подключиться к X-дисплею, который им не принадлежит. Поскольку X был разработан для обеспечения удаленного подключения, он не мог полагаться только на пользователя unix. Таким образом, X имеет механизм авторизации :, когда приложение хочет подключиться к X-дисплею, оно должно доказать, что оно авторизовано. В современном мире существует только один механизм авторизации, который представляет собой «куки» в формате MIT-MAGIC-COOKIE-1(16 байтов, представленных в шестнадцатеричном формате ). Файл cookie — это длинная случайная строка, которая генерируется при запуске сервера и сохраняется в файле, который может прочитать только законный пользователь. Чтобы подключиться к дисплею X,приложение должно отправить значение cookie на сервер. Если значение cookie неверно, сервер отклоняет соединение.

1
18.03.2021, 23:01

Теги

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