Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam
Potrzebuje by system szybko reagował na wyjęcie dysku(ów) (hotswap).
W tej chwili gdy podłącze dowolny dysk - system reaguj niemal natychmiast - ale gdy go odłączę to mija około 10 sek. zanim dysk zniknie z /proc/partitions.
Tak jest gdy korzystam z portów SATA .
Gdy zrobię taki sam eksperyment przez kieszeń usb reakcja na oba zdarzenia jest natychmiastowa.
Znalazłem - na forum tu też jest taki wpis tego samego autora
[url]https://morfitronik.pl/udev-czyli-jak-pisac-reguly-dla-urzadzen/[/url]
Ale autor też nie wie jak to zrobić.
Skonstruowałem coś takiego :
w utworzonym pliku /etc/udev/rules.d/93-hd.rules
SUBSYSTEM=="block", ACTION=="ADD", KERNEL=="sd?", ATTR{eh_timeout}="1"
jeszcze próbowałem :
ACTION=="add|change", KERNEL=="sdb", SUBSYSTEM=="block", PROGRAM="/bin/sh -c 'echo 1 > /sys$devpath/eh_timeout'" ACTION=="add|change", KERNEL=="sdc", SUBSYSTEM=="block", PROGRAM="/bin/sh -c 'echo 1 > /sys$devpath/eh_timeout'" ACTION=="add|change", KERNEL=="sdd", SUBSYSTEM=="block", PROGRAM="/bin/sh -c 'echo 1 > /sys$devpath/eh_timeout'" ACTION=="add|change", KERNEL=="sde", SUBSYSTEM=="block", PROGRAM="/bin/sh -c 'echo 1 > /sys$devpath/eh_timeout'" ACTION=="add|change", KERNEL=="sdf", SUBSYSTEM=="block", PROGRAM="/bin/sh -c 'echo 1 > /sys$devpath/eh_timeout'"
Ale to nic nie daje :/
Może ktoś mi pomóc ?
Offline
Ja nie napisałem, że nie wiem jak to zrobić. Zadałeś mi pytanie: "co robię źle" -- to odpowiedziałem zgodnie z prawdą, że "nie wiem". xD Poza tym, wpis dotyczy pisania reguł dla urządzeń, to już w twojej gestii leży by w oparciu o to info dopasować regułę, tak by UDEV ją zaaplikował. Nikt ci z fusów wróżyć nie będzie. Masz info we wpisie jak ewentualnie debugować UDEV'a, to bierz i korzystaj.
Ostatnio edytowany przez morfik (2017-05-26 08:43:46)
Offline
Ok. Przyznaje się do winy - pytanie źle zadane było.
Po podmianie reguły na :
ACTION=="add", KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM="/bin/sh -c 'echo 1 > /sys$devpath/device/eh_timeout'"
wpis działa - wartość w pliku eh_timeout jest 1 a nie 10 - niestety nie ma to wpływu na czas po jakim wpisy o dysku znikają z /proc/partitions :(
udevadm monitor nie wykazuje nieprawidłowości
w /var/log/debug widać fakt wykonania tej zasady i żadnych błędów.
Offline
A partycje to raczej mają dłuższe nazwy niż to co masz określone w parametrze KERNEL=="sd?"
Ostatnio edytowany przez arecki (2017-05-26 11:17:33)
Offline
W zasadzie jeśli przepisuje wartość pliku, to reguła działa, a że wartość w tym pliku nie wpływa na zachowanie, to chyba już osobna kwestia.
Ostatnio edytowany przez morfik (2017-05-26 11:41:04)
Offline
A co się dzieje jak wykonasz na dysku, który chcesz odłączyć np. sda
echo 1 > /sys/block/sda/device/delete
Offline
[b]arecki[/b]
"sd?" oznacza reakcje na każde urządzenie typu sd[b]a[/b] sd[b]b[/b] sd[b]c[/b] ... sd[b]x[/b]
[b]andreq[/b]
"odpina" dysk od udev'a i traci się z tym urządzeniem kontakt.
[b]morfik[/b]
No dobra - to jak można to zrobić inaczej ? - metoda jest obojętna - udev akurat wpadł mi pierwszy do głowy - byle szybciej system reagował na odpięcie dysku(ów)
Offline
Jasne, ale czy znika z /proc/paritions?
Offline
Tak - znika.
Offline
Napisz dlaczego tak zależy Ci na szybszej aktualizacji /proc/partitions i co kombinujesz z tym odpinaniem dysków?
Offline
[b]morfik[/b]
[url]https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/6.5_Release_Notes/kernel.html[/url]
[b]andreq[/b]
To "kasowarka" do dysków :)
Mógłbym zastosować to DELETE - ale skrypt przestał by pokazywać czy skasowany dysk faktycznie jest pusty (nie ma partycji) :/
A czekanie 10 sek na zmianę na następne dyski jest kiepskie (zastosowanie "przemysłowe" że tak się wyrażę)
Offline
jesli kasujesz dyski po 20GB to te 10 sek może mieć znaczenie, ale nie oszukujmy się, pewnie mielisz tam terabajty dziennie.
Wobec powyższego- puszczasz w pętli kasowarkę, na końcu
sync umount /mnt/kasowany || echo "przecież to nie było zamontowane xD" echo 1 > /sys/block/sda/device/delete beep;sleep 1;beep
Offline
To że nie ma partycji, to nie znaczy, że na dysku nie ma danych.
Zawsze po "DELETE" możesz zrobić zrobić:
echo "- - -" > /sys/class/scsi_host/host0/scan
po wszystkich lub wybranym hoscie w systemie i będziesz miał nowe dyski dostępne.
Nie żartuj, że czas 10 s na zmianę dysku jest kluczowy, to ile trwa jego kasowanie też 10 s? Przecież nadpisanie danych zajmuje sporo czasu.
Offline
1 sek. - to nie "czyszczenie" - tylko nadpisanie mbr/gpt
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00012 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00111 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='13.59.134.65' WHERE u.id=1 |
0.00078 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '13.59.134.65', 1732440703) |
0.00055 | SELECT * FROM punbb_online WHERE logged<1732440403 |
0.00053 | SELECT topic_id FROM punbb_posts WHERE id=311020 |
0.00006 | SELECT id FROM punbb_posts WHERE topic_id=29609 ORDER BY posted |
0.00049 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=29609 AND t.moved_to IS NULL |
0.00025 | SELECT search_for, replace_with FROM punbb_censoring |
0.00102 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=29609 ORDER BY p.id LIMIT 0,25 |
0.00080 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=29609 |
Total query time: 0.00575 s |