LINUX.ORG.RU

Избранные сообщения Vlad-76

journald. Запись на диск только критически важной информации

 

Т.е, чтобы текущий лог можно было прочитать(чтобы он в памяти находился) и только всякое критическое записывалось на диск. Зачем это? Потому что journald гигабайтами пишет информацию на диск, хотелось бы, чтобы он этого не делал

С 28 февраля

Data Units Read:                    4,093,715 [2.09 TB]
Data Units Written:                 1,066,151 [545 GB]

до 25 августа

Data Units Read:                    4,790,068 [2.45 TB]
Data Units Written:                 1,295,987 [663 GB]

118гб записано. Ясно, что тут не только лог писал, еще было 2 обновления. Но примерно 50% тут journald поработал. Идеологически считаю, что то, что пишет journald на диск - мусор. Хотелось бы какой-то level типа error выставить, чтобы он не спамил мусор на диск

serg002
()

Виртуалка с Debian 11. Как исправить ошибку с зависимостями в пакетах

 ,

Понадобился fail2ban на виртуалке, но тут вылезло ...
После чего случилось - уже и не вспомню. Как исправить чтобы не ставить кучу пакетов для исправления? Виртуалка мизерная, крутится несколько процессов, ничего лишнего на ней не нужно, даже просто файлы с пакетами. Они просто не нужны для выполняемых задач

root@acid:/usr/local/# apt install fail2ban
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 code : Depends: libasound2 (>= 1.0.17) but it is not going to be installed
        Depends: libatk-bridge2.0-0 (>= 2.5.3) but it is not going to be installed
        Depends: libatk1.0-0 (>= 2.2.0) but it is not going to be installed
        Depends: libatspi2.0-0 (>= 2.9.90) but it is not going to be installed
        Depends: libdrm2 (>= 2.4.75) but it is not going to be installed
        Depends: libgbm1 (>= 17.1.0~rc2) but it is not going to be installed
        Depends: libgtk-3-0 (>= 3.9.10) but it is not going to be installed
        Depends: libgtk-3-0 (>= 3.9.10) but it is not going to be installed or
                 libgtk-4-1 but it is not installable
        Depends: libnspr4 (>= 2:4.9-2~) but it is not going to be installed
        Depends: libnss3 (>= 2:3.30) but it is not going to be installed
        Depends: libnss3 (>= 3.26) but it is not going to be installed
        Depends: libxcomposite1 (>= 1:0.4.4-1) but it is not going to be installed
        Depends: libxdamage1 (>= 1:1.1) but it is not going to be installed
        Depends: libxfixes3 but it is not going to be installed
        Depends: libxkbcommon0 (>= 0.4.1) but it is not going to be installed
        Depends: libxkbfile1 but it is not going to be installed
        Depends: libxrandr2 but it is not going to be installed
        Depends: xdg-utils (>= 1.0.2) but it is not going to be installed
        Recommends: libvulkan1 but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

root@acid:/usr/local/# apt --fix-broken install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  libblas3 liblinear4 nmap-common
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  adwaita-icon-theme alsa-topology-conf alsa-ucm-conf at-spi2-core dbus dbus-user-session dconf-gsettings-backend dconf-service
  glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas gtk-update-icon-cache hicolor-icon-theme
  libasound2 libasound2-data libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0 libauthen-sasl-perl libavahi-client3
  libavahi-common-data libavahi-common3 libcairo-gobject2 libclone-perl libcolord2 libcups2 libdata-dump-perl libdbus-1-3 libdconf1
  libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libencode-locale-perl libepoxy0
  libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libfont-afm-perl libfontenc1 libgbm1
  libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0
  libglx0 libgtk-3-0 libgtk-3-bin libgtk-3-common libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl
  libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl
  libio-html-perl libio-socket-ssl-perl libio-stringy-perl libipc-system-simple-perl libjson-glib-1.0-0 libjson-glib-1.0-common
  liblcms2-2 libllvm11 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libnet-dbus-perl libnet-http-perl
  libnet-smtp-ssl-perl libnet-ssleay-perl libnspr4 libnss3 libpciaccess0 libproxy1v5 librest-0.7-0 librsvg2-2 librsvg2-common
  libsoup-gnome2.4-1 libsoup2.4-1 libtie-ixhash-perl libtimedate-perl libtry-tiny-perl liburi-perl libvte-2.91-0 libvte-2.91-common
  libvulkan1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 libwww-perl libwww-robotrules-perl libx11-6
  libx11-protocol-perl libx11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-shape0 libxcb-sync1
  libxcb-xfixes0 libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxft2 libxi6 libxinerama1 libxkbcommon0 libxkbfile1
  libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxrandr2 libxshmfence1 libxtst6 libxv1 libxxf86dga1 libxxf86vm1
  libz3-4 mesa-vulkan-drivers perl-openssl-defaults termit x11-utils x11-xserver-utils xdg-utils xkb-data
Suggested packages:
  libasound2-plugins alsa-utils libdigest-hmac-perl libgssapi-perl colord cups-common gvfs liblcms2-utils libcrypt-ssleay-perl
  pciutils librsvg2-bin libauthen-ntlm-perl libunicode-map8-perl libunicode-string-perl xml-twig-tools mesa-utils nickle cairo-5c
  xorg-docs-core
The following NEW packages will be installed:
  adwaita-icon-theme alsa-topology-conf alsa-ucm-conf at-spi2-core dbus-user-session dconf-gsettings-backend dconf-service
  glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas gtk-update-icon-cache hicolor-icon-theme
  libasound2 libasound2-data libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0 libauthen-sasl-perl libavahi-client3
  libavahi-common-data libavahi-common3 libcairo-gobject2 libclone-perl libcolord2 libcups2 libdata-dump-perl libdconf1
  libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libencode-locale-perl libepoxy0
  libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libfont-afm-perl libfontenc1 libgbm1
  libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0
  libglx0 libgtk-3-0 libgtk-3-bin libgtk-3-common libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl
  libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl
  libio-html-perl libio-socket-ssl-perl libio-stringy-perl libipc-system-simple-perl libjson-glib-1.0-0 libjson-glib-1.0-common
  liblcms2-2 libllvm11 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libnet-dbus-perl libnet-http-perl
  libnet-smtp-ssl-perl libnet-ssleay-perl libnspr4 libnss3 libpciaccess0 libproxy1v5 librest-0.7-0 librsvg2-2 librsvg2-common
  libsoup-gnome2.4-1 libsoup2.4-1 libtie-ixhash-perl libtimedate-perl libtry-tiny-perl liburi-perl libvte-2.91-0 libvte-2.91-common
  libvulkan1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 libwww-perl libwww-robotrules-perl
  libx11-protocol-perl libx11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-shape0 libxcb-sync1
  libxcb-xfixes0 libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxft2 libxi6 libxinerama1 libxkbcommon0 libxkbfile1
  libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxrandr2 libxshmfence1 libxtst6 libxv1 libxxf86dga1 libxxf86vm1
  libz3-4 mesa-vulkan-drivers perl-openssl-defaults termit x11-utils x11-xserver-utils xdg-utils xkb-data
The following packages will be upgraded:
  dbus libdbus-1-3 libx11-6
3 upgraded, 139 newly installed, 0 to remove and 102 not upgraded.
1 not fully installed or removed.
Need to get 72.0 MB of archives.
After this operation, 285 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Vlad-76
()

с++ привести тип std::string к указателю на другой тип

 

server.cpp:81:66: error: invalid initialization of reference of type ‘const OctetStringPtr&’ {aka ‘const std::shared_ptr<std::vector<unsigned char> >&’} from expression of type ‘std::string’ {aka ‘std::__cxx11::basic_string<char>’}

Или что почитать грамотное про это?

Vlad-76
()

UPS на 12 В из контроллера для солнечных батарей

 

Мое почтение, господа.

Поскольку подкроватный сервер и все окружающее его сетевое оборудование работает у меня от 12 или 9 В. Я подумал, а не сделать ли беcперебойник из автомобильного аккумулятора и контроллера, который используют вместе с солнечными панелями. Ну а сам контроллер уже запитать от какого-то 12-вольтового источника.
В идеале, хотелось бы иметь еще какой-то интерфейс (UART, I2C, etc), чтобы можно было получить состояние сети и/или заряд/напряжение аккумулятора.

Думал, у китайцев должна какая-то плата быть, у них же все есть на любой случай жизни — но не нашел. Может я плохо искал? Нормальный ли вариант с солнечным контроллером?

urxvt
()

Создание устойчивого серверного ПО

 , ,

Добрый день, ЛОР! Давно не постил, потому что нечего было сказать. А сейчас, кажется, есть.

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

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

Итак, начнём с идемпотентности - свойства запроса обладать возможностью быть исполненным несколько раз, и иметь эффект как от одного исполнения. Ценность в следующем - допустим, клиент производил запрос, и соединение оборвалось. Был запрос принят или нет - не понятно. Если клиент переводил на другой счёт деньги - может ли он обновить страницу и не бояться, что деньги спишутся дважды? Проще всего достижимо добавлением id запроса в его тело - если запрос уже был исполнен, операция не производится, и возвращается сохранённый результат.

Далее распределённые транзакции, самый оптимальный вариант - сага. Сценарий - при заказе еды с доставкой, необходимо списать деньги со счёта, подать заявку на кухню, вызвать курьера. Все три действия должны произойти атомарно - если одно из них исполнить невозможно, два других нужно отменить, и передать пользователю ошибку. Откатываемая цепочка транзакций называется сагой.

Как достигнуть устойчивости? Имеем парк серверов, каждый из них выполняет свою операцию, с возможностью её отменить - их необходимо координировать в условиях риска выхода из строя серверов, ПО и сети. При выходе из строя сервера необходимо, чтобы он возобновил исполнение присвоенных ему операций - нужно сохранять их в реплицированную БД. Кажется, любая простая БД типа Ключ-Значение подойдёт. Когда исполнение возобновится - оно должно продолжить с момента последней транзакции в цепочке - то есть после каждой транзакции в цепочке, промежуточное состояние должно сохраняться в БД - с возможностью возобновления операции другим исполнителем.

Теперь координация задач - её можно производить либо централизованно, с механизмами RPC, либо распределённо, через брокер сообщений, с реакцией на их получение. В первом случае получаем лучшую отслеживаемость, во втором - большую устойчивость к отказу исполнителей - сообщения могут хранится в брокере.

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

Но какой должен быть лимит по ресурсам для абстрактного запроса? Поскольку если запрос - «Исполнить SQL выражение» (в случае, если наш сервис - база данных) - у него может быть самое разное потребление памяти и процессорного времени. Решением, на мой взгляд, будет разделение непредсказуемого запроса на предсказуемые - и заранее зная их количество и стоимость, можно оценить затраты на изначальный запрос. Для SQL запроса это будет сначала запрос типа PLAN - сам по себе достаточно предсказуемый - а затем проверка наличия ресурсов и исполнение для каждого шага плана. Но если верхнеуровневый запрос, не имеющий достаточно ресурсов, имеет смысл отбросить сразу - то порождённые запросы стоит выстраивать в очередь.

Зная ограничения по ресурсам, необходимо реализовать их соблюдение. В этом нам поможет ядро ОС - оно отслеживает объём памяти, закреплённый за процессом, и процессорное время, им затраченное. В Linux порог можно выставить командой ulimit и системным вызовом setrlimit. Вводить ограничения необходимо именно на уровне процесса, поскольку память по факту принадлежит не потоку и не корутине, а именно процессу (стек у каждого свой, но куча - общая для процесса), и если память кончается - OOM Killer убивает процесс. Ситуация сложнее для cgroup, в которых выставлено убийство всей cgroup сразу (как для подов в k8s), но это отдельная история, и ulimit можно ставить чуть ниже суммарного ограничения для cgroup. Теперь касательно процессорного времени - оно также действует на процесс целиком (может есть лимит на конкретный поток?). Конечно, запуск процесса под каждый запрос - схема плохо масштабируемая (хотя с идеологической точки зрения, кажется, наиболее правильная), поэтому можно использовать пул процессов, поднимающих свои лимиты для каждого запроса. Также можно запускать N корутин в каждом процессе - суммируя их лимиты. Если одна корутина перейдёт порог, убиты будут все N - но это лучше, чем если бы все запросы жили корутинами в одном процессе, и умерли бы все.

Я вполне представляю, как это можно реализовать для Reverse-proxy (nginx, apache), Python и gRPC. Для разных методов gRPC, каждый из которых предсказуем, указываем в Reverse Proxy свой обработчик - пул процессов. Python достаточно низкоуровневый для общения с ядром, чтобы каждый процесс мог менять свои лимиты. И реализация gRPC имеет параметр max_concurrent_rpcs - чтобы предотвратить DDOS (только на L7, или ещё на L3+4 - не знаю. Но кажется в любом случае, AntiDDOS на L3+4 умеет Reverse Proxy). Если вам подход показался разумным - как бы вы реализовывали на своём ЯП?

lostghost1
()

Анализ процесса

 

Привет всем! Подскажите утилиту которой можно подключиться к процессу и увидеть, какая функция активно используется. Я ее использовал раньше, но сейчас не могу вспомнить название.

anonymus123
()

Для чего нужно EINTR?

 

Многие системные вызовы могут возвращать ошибку и устанавливать errno == EINTR, при этом рекомендуется повторить системный вызов. Для чего это требуется? Это как то можно использовать в своей программе? Почему ядро не может само обработать эту ситуацию и перезапустить вызов?

iluha16
()

C++, boost asio, сетевой сервер на 10К клиентов.

Ну, есть такая «проблема 10K» - потоков/процессов столько не насоздаёшь, да и нерационально иметь потоков больше числа ядер, а select() тоже не поюзаешь, ибо каждый раз гонять между ядром и приложением 10К-кусок данных - не круто. И тут приходит epoll и все радуются. Или там kqueue или чё-то такое.

А вот как это представлено в boost::asio?

kiverattes
()

Есть ли способ отловить, где течет С?

 ,

Приветствую.

Есть С-код: https://github.com/derickr/pecl-dbus/blob/master/dbus.c

Если вкратце, этот код - биндинг полутора функций для работы с d-bus.

И этот код течет аки решето.

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

Вопрос: есть ли какой-нибудь изящный способ вывести все переменные объекта или иным способом отдебажить где жор?

Благодарю.

windows10
()

что значит & у поля класса?

 

Например, есть код.

class A {
private:
  const X& x;
public:
  A(const X& x) : x(x) {};
  getX() { return x; }
}

int main() {
  X x1;
  A a(x1);
  std::cout<<a.getX()<<"\n";
}

Верно ли я понимаю что в таком случае созданная в main() переменная x1 типа X не будет копироваться, а поле класса x будет инициализировано ссылкой на оригинальный x1?

AndreyKl
()

Проект на чистом Си

 , , ,

Камрады, всем доборый день!

Решил тряхнуть стариной, написать кое-что полезное для себя и таких же упоротых личностей. Заодно вспомнить Си (который без «крестов»). Естественно, хочется сделать «красиво, модно, молодёжно» и удобно. Вопрос - как проекты на Си принято начинать в 2024? Ну там пакетные менеджеры (а они вообще есть?), линтеры и прочее счастье. Какой стандарт сейчас считается «правильным» для использования и какую литературку/доку по нему почитать? Буду благодарен, если покидаетесь статьями или книгами.

small-entropy
()

Как мне реализовать системные вызовы?

 , , , ,

Если вы не слышали, я создаю гибридное ядро ОС, которое будет полностью свободным и лёгким. Как мне реализовать системные вызовы?

anatoliy6463
()

LVM, Proxmox, NVME LV read only. Че делать

 , ,

Столкнулся с проблемой что в одной из виртуальных машин посыпались ошибки дисковых операций типа:

[  +0.000006] EXT4-fs error (device dm-6): kmmpd:179: comm kmmpd-dm-6: Error wri                                                                                                                                                             ting to MMP block
[  +0.000006] blk_update_request: I/O error, dev nvme0n1, sector 57003600 op 0x1                                                                                                                                                             :(WRITE) flags 0x8800 phys_seg 1 prio class 2
[  +0.000006] EXT4-fs warning (device dm-6): ext4_end_bio:342: I/O error 10 writ 

первая мысль умер винт…но dmesg хоста ничего не говорил об ошибках в своих сообщениях. Похоже проблема моя описана тут: https://bugzilla.proxmox.com/show_bug.cgi?id=3738 , но решения из этого топика не решили проблему. Сейчас при попытке создать VM получаю ошибки:

 WARNING: Thin pool Gigabyte_nvme/Gigabyte_nvme needs check has read-only metadata.
  WARNING: Thin pool Gigabyte_nvme/Gigabyte_nvme has unexpected transaction id 18, expecting 19.
no lock found trying to remove 'create'  lock
error before or during data restore, some or all disks were not completely restored. VM 100 state is NOT cleaned up.

WARNING: Thin pool Gigabyte_nvme/Gigabyte_nvme needs check has read-only metadata. Сам же этот том находится в режиме только чтение:

 --- Logical volume ---
  LV Name                Gigabyte_nvme
  VG Name                Gigabyte_nvme
  LV UUID                Rg53rQ-MrG1-o1UF-c7UJ-VwOd-lcU1-mecQ40
  LV Write Access        read/write (activated read only)
  LV Creation host, time pve, 2023-03-09 11:22:50 +0300
  LV Pool metadata       Gigabyte_nvme_tmeta
  LV Pool data           Gigabyte_nvme_tdata
  LV Status              available
  # open                 0
  LV Size                493.39 GiB
  Allocated pool data    9.56%
  Allocated metadata     0.82%
  Current LE             126308
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     512
  Block device           253:5

утилита проверки выдает такое:


thin_check /dev/Gigabyte_nvme/Gigabyte_nvme_meta0
examining superblock
TRANSACTION_ID=18
METADATA_FREE_BLOCKS=1250303
examining devices tree
examining mapping tree
  thin device 2 is missing mappings [1699316, 1699444]
    bad checksum in btree node (block 9276)

Куда дальше копать то? может вообще по неправильному пути иду?

pistoletov
()

Линукс, ассемблер и X11

 , ,

Линукс, ассемблер и X11

Это текстовая версия моей статьи про разработку графического приложения на чистом ассемблере под линукс.

( читать дальше... )

alex0x08
()

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 2)

 , , ,

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 2)

Эта статья является продолжением предыдущей публикации, в которой описывается разработка сетевой библиотеки на C++20. В данном продолжении акцент сделан на более детальном описании разработки алгоритма Raft и его интеграции с сетевой библиотекой.

( читать дальше... )

Reset
()

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 1)

 , , , ,

Разработка сетевой библиотеки на C++20: интеграция асинхронности и алгоритма Raft (часть 1)

Введение

С годами работы в области распределённых систем, я понял, что мой опыт не будет полным без реализации алгоритма Raft. Это осознание побудило меня к действию: я решил создать свою реализацию, используя асинхронные возможности C++20.

( читать дальше... )

Reset
()

Отдебажить где именно произошла ошибка разыменования ссылки в perl

 ,

Предположим есть такой код (добавил нумерацию строк для наглядности)

1:  use strict;
2:
3:  my %a = (
4:     a => 12,
5:     b => '',
6:     x => { z => 22 },
7:     l => 'sd'
8:  );
9:
10: my %c = (
11:    f => 'test',
12:    b => $a{b}{c},
13:    g => $a{a},
14:    d => $a{x}{z},
15: );

он выдает такую ошибку: Can't use string ("") as a HASH ref while "strict refs" in use at /tmp/t.pl line 15. Из него совершенно неочевидно где именно произошла ошибка. Если структура %c будет ещё сложнее и длиннее, то поиск ошибки вообще превратится в боль. Можно ли как-то сделать, чтобы perl явно показал, что проблема в данном случае в $a{b}{c}?

Olegymous
()

Это рассинхронизация массива?

 

Здравствуйте, форумчане. Похоже, запустил систему без одного диска (кабель выпал). Подключил его обратно, и теперь массив не стартует. Запустил его сам: mdadm --assemble --readonly --force --name --scan. Теперь он отображается в /proc/mdstat как неполный:

6442186752 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/3] [_UUU]

На всех трёх ЖД, которые рабочие, запускал mdadm --examine УСТРОЙСТВО, и на последней строчке массив так же отображается как неполный: Array State : .AAA ('A' == active, '.' == missing, 'R' == replacing). А вот у виновника эта строчка гласит, что массив полный: Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing).

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

fingolfin
()

как правильно линковать в make?

 

есть пакет в Debian из репозитория libssh2-1 создающий в /usr/lib/x86_64-linux-gnu/
соответственно
libssh2.a
libssh2.so
libssh2.so.1
libssh2.so.1.0.1

он кривой, скачал с исходника последнуюю версию, сделал конфиг и мейк, без мейк инсталл, как прилинковать эту библиотеку при компиляции, т.к. то что делаю ниже все равно почему то тянет старую версию, приходится просто подменять файл libssh2.so.1.0.1 в /usr/lib/x86_64-linux-gnu/

g++ -o AddWork AddWork.cpp -L./ibpp/core -lfbclient -libpp -DIBPP_LINUX -L./libssh2-1.8.2/src -lssh2-1.8.2-ssl-dbg
wolverin
()