LINUX.ORG.RU

Запрещён доступ к /sys

 ,


0

1

Система: debian8, raspberry pi3, ядро 4.4, самосборное.

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

Но тут всплыла проблема: я использую 4 устройства zram, настраиваются они при запуске из скрипта /etc/rc.local через передачу параметров в /sys. Фрагмент скрипта:

echo 80 > /proc/sys/vm/swappiness
echo noop > /sys/block/mmcblk0/queue/scheduler
echo 300 > /proc/sys/kernel/panic

modprobe zram num_devices=4
echo 104857600 > /sys/block/zram0/disksize
echo 104857600 > /sys/block/zram1/disksize
echo 104857600 > /sys/block/zram2/disksize
echo 104857600 > /sys/block/zram3/disksize
#echo 12792627200 > /sys/block/zram4/disksize
echo lz4 > /sys/block/zram0/comp_algorithm
echo lz4 > /sys/block/zram1/comp_algorithm
echo lz4 > /sys/block/zram2/comp_algorithm
echo lz4 > /sys/block/zram3/comp_algorithm
#echo lz4 > /sys/block/zram4/comp_algorithm
#mkfs.ext2 -L tmp -N 300000 -m0 /dev/zram4
#mount /dev/zram4 /tmp
#chmod aoug+rwx /tmp
/sbin/mkswap /dev/zram0
/sbin/mkswap /dev/zram1
/sbin/mkswap /dev/zram2
/sbin/mkswap /dev/zram3
swapon /dev/zram0 -p 10
swapon /dev/zram1 -p 10
swapon /dev/zram2 -p 10
swapon /dev/zram3 -p 10

После апуска системы оказывается, что все действия до echo 104857600 > /sys/block/zram3/disksize были выполнены корректно, а после нет. В dmesg есть одно сообщение о неудачной смене алгоритма сжатия:

[    7.947439] zram: Added device: zram0
[    7.950359] zram: Added device: zram1
[    7.953761] zram: Added device: zram2
[    7.977159] zram: Added device: zram3
[    7.979407] zram0: detected capacity change from 0 to 104857600
[    7.979941] zram1: detected capacity change from 0 to 104857600
[    7.980442] zram2: detected capacity change from 0 to 104857600
[    7.981018] zram3: detected capacity change from 0 to 104857600
[    7.981200] zram: Can't change algorithm for initialized device

Вероятно полсе одной неудачной попытки rc.local был прерван systemd, ведь обычные скрипты в таком случае всё равно выполняют все последующие операции.

Когда система запущена, оказывается, что доступ на запись в параметры /sys запрещён. Очевидно, что то запретило его в процессе запуска. Как найти, что это было? Как разрешить доступ?

P.S. Не надо предлагать zramctl и соответствующий юнит, эта утилита недоступна в текущей версии binutils/coreutils и она наверняка делает то же самое, что echo.

★★★★★

rc.local запускается в последнюю очередь, systemd не может его прервать и запретить!

piwww ★★★★
()
Ответ на: комментарий от piwww

Факт остаётся фактом: в процессе выполнения скрипта доступ к sys исчезает, и что то прерывает скрипт после первой ошибки.

kirill_rrr ★★★★★
() автор топика
Ответ на: комментарий от kirill_rrr

доступ к sys исчезает

Лолвут? Тебе же оно само причину пишет:

Can't change algorithm for initialized device

Так что компрессию задавай до задания объёма.

anonymous
()
Ответ на: комментарий от anonymous

Этот скрипт великолепно работал уже пару месяцев без изменений.

Забыл показать: /sys действительно недоступен на запись:

rrr@raspberrypi:~$ su
Пароль: 
root@raspberrypi:/home/rrr# cd ~
root@raspberrypi:~# swapoff /dev/zram0
root@raspberrypi:~# echo 1000000 > /sys/block/zram3/disksize         
bash: echo: ошибка записи: Устройство или ресурс занято
root@raspberrypi:~# echo lz4 > /sys/block/zram0/comp_algorithm   
bash: echo: ошибка записи: Устройство или ресурс занято
root@raspberrypi:~# ls -al /
итого 88
drwxr-xr-x  21 root root  4096 янв  1  1970 .
drwxr-xr-x  21 root root  4096 янв  1  1970 ..
drwxr-xr-x   2 root root  4096 апр 20 16:17 bin
drwxr-xr-x   2 root root  4096 май 20 17:52 boot
drwxr-xr-x  16 root root  3300 май 21 10:28 dev
drwxr-xr-x 123 root root 12288 май 21 22:05 etc
drwxr-xr-x   5 root root  4096 янв 27 11:11 home
drwxr-xr-x  19 root root  4096 апр 15 09:51 lib
drwx------   2 root root 16384 авг  9  2017 lost+found
drwxr-xr-x   7 root root  4096 мар 13 17:57 media
drwxr-xr-x   2 root root  4096 янв 31  2017 mnt
drwxr-xr-x   5 root root  4096 апр 20 16:20 opt
dr-xr-xr-x 162 root root     0 янв  1  1970 proc
drwx------  10 root root  4096 апр 23 02:37 root
drwxr-xr-x  20 root root   640 май 20 18:32 run
drwxr-xr-x   2 root root  4096 янв  1  1970 sbin
drwxr-xr-x   3 root root  4096 май 20  2017 srv
dr-xr-xr-x  12 root root     0 май 20 18:28 sys
drwxrwxrwt  24 root root   600 май 21 22:21 tmp
drwxr-xr-x  11 root root  4096 окт 15  2016 usr
drwxr-xr-x  11 root root  4096 июн  3  2017 var
root@raspberrypi:~# ls -al /sys
итого 4
dr-xr-xr-x  12 root root    0 май 20 18:28 .
drwxr-xr-x  21 root root 4096 янв  1  1970 ..
drwxr-xr-x   2 root root    0 май 21 22:22 block
drwxr-xr-x  18 root root    0 май 21 19:48 bus
drwxr-xr-x  52 root root    0 май 21 19:48 class
drwxr-xr-x   4 root root    0 май 21 10:02 dev
drwxr-xr-x   9 root root    0 янв  1  1970 devices
drwxr-xr-x   3 root root    0 май 21 22:23 firmware
drwxr-xr-x   6 root root    0 янв  1  1970 fs
drwxr-xr-x   8 root root    0 янв  1  1970 kernel
drwxr-xr-x 101 root root    0 май 21 10:17 module
drwxr-xr-x   2 root root    0 май 21 22:23 power

kirill_rrr ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Даже не так, запрет записи в сам /sys это не важно. /sys/block/zram* это симлинки, но это в общем то тоже не важно.

root@raspberrypi:~# ls -al /sys/devices/virtual/block/zram0
итого 0
drwxr-xr-x  7 root root    0 май 21 22:28 .
drwxr-xr-x 14 root root    0 май 21 22:28 ..
-r--r--r--  1 root root 4096 май 21 22:28 alignment_offset
lrwxrwxrwx  1 root root    0 май 21 22:28 bdi -> ../../bdi/254:0
-r--r--r--  1 root root 4096 май 21 22:28 capability
--w-------  1 root root 4096 май 21 22:28 compact
-rw-r--r--  1 root root 4096 май 21 22:23 comp_algorithm
-r--r--r--  1 root root 4096 май 21 22:28 compr_data_size
-r--r--r--  1 root root 4096 май 21 22:28 dev
-r--r--r--  1 root root 4096 май 21 22:28 discard_alignment
-rw-r--r--  1 root root 4096 янв  1  1970 disksize
-r--r--r--  1 root root 4096 май 21 22:28 ext_range
-r--r--r--  1 root root 4096 май 21 22:28 failed_reads
Здесь право на запись есть, но при попытке поменять значение - та же ошибка, устройство занято.

И если например менять шедулер на SD-карте, то всё работает.

root@raspberrypi:~# echo cfq > /sys/block/mmcblk0/queue/scheduler
root@raspberrypi:~# cat /sys/block/mmcblk0/queue/scheduler
noop [cfq] 
root@raspberrypi:~#

kirill_rrr ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Так что компрессию задавай до задания объёма.

Да, действительно. Оказалось он к этому чувствителен и задать компрессию можно только до размера.

Не предствляю, каким багом у меня до этого работало и на каком алгоритме - видимо пока что то не начало прерывать rc.local при ошибке, он так и подключал lzo.

kirill_rrr ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Да вот скажем алгоритм lzo, принципиально однопоточный. Ему конечно и не надо, но он и не может задействовать более 1 ядра.

kirill_rrr ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.