Linux: Cum fac...?

Restore:
Code:
xz -dck openwrt.a.2022-06-23.btrfs.xz | btrfs -v receive .subvols
Comanda creaza subdirector cu snapshot-ul readonly in dir .subvols. Pentru read-write, se face snapshot fara -r la snapshot-ul extras mai sus si mount cu optiunea subvolid.
 
Last edited:
NFS este superb. Absolut superb. Cu o exceptie:
Dupa resume din suspend-to-ram, orice accesare a mount-urilor NFS duce la o blocare, inclusiv incercarea de umount. Singura solutie este reset-ul din buton.
Cum rezolv chestia asta?
 
find /lib/modules -name *.ko -exec echo "{}" \;
... imi printeaza toate fisierele .ko cu tot cu path

find /lib/modules -name *.ko -exec basename "{}" \;
... imi printeaza toate .ko fara path, doar numele fisierului

echo $(basename "/lib/modules/...ceva.ko")
... imi printeaza ceva.ko fara path, doar numele fisierului

Dar combinatia:
find /lib/modules -name *.ko -exec echo $(basename "{}") \;
... imi printeaza toate .ko cu tot cu path. De ce?
 
Last edited:
Deschid X din consola (tty4, spre exemplu) unui user normal si rulez niste programe GUI pe care nu vreau sa le inchid. Din consola root (tty1, sa zicem) am nevoie sa rulez un alt program GUI.
Nu pot porni (sau ar fi foarte greu de pornit) programul root dintr-un xterm in sesiunea X deja deschisa din motive de copiat parametri cu GPM care, bineinteles, nu se integreaza cu clipboardul X, cu atat mai putin in sesiunea X a altui user.
Asadar:
- Cum fac sa imi apara fereastra in X-ul userului normal? sau
- Cum fac sa pornesc al doilea X? sau
- Cum fac sa inchid X-ul user-ului dar fara sa inchid programele pentru ca apoi, dupa ce termin cu root, sa revin la ele?
 
Diverse probleme btrfs:

1) Subvolumul root default este #5. Fac snapshot ro #5 => #250. Dupa o vreme de duce naibii ce lucram pe #5. Fac snapshot rw la #250 => #280 si setez #280 default root. Acum cum fac sa sterg #5 si #250? Am incercat "btrfs sub delete -i 250" (not enough arguments: 0 but at least 1 expected) si "btrfs sub delete <directorului lui #250>" (file not found, logic, ca nu mai este sub root-ul curent).

2) Fac subvolume in root-ul curent. Fac snapshot-uri la root si subvolume. La un moment dat se duce naibii root-ul. Daca fac snapshot rw dupa unul din backup-uri si il setez root defaut, cum fac sa apara subvolumele care erau sub root-ul initial in asta nou? Trebuie sa tin minte care erau alea (am multe!) si prin ce directoare erau si sa le fac si lor snapshot-uri noi in root-ul nou? Dar cum le fac snapshot-uri daca nu le mai am in root-ul nou?
 
1) btrfs sub delete -i 250
nu-i zici din ce filesystem să șteargă; comanda e delete -i|--subvolid <subvolid> <path>
If --subvolid is used, path must point to a btrfs filesystem
 
Fac un backup cu cron si tar. Fisierele sunt denumite cu $(date %Y-%m-%d_%H.%M.%S). De multe ori, nu exista modificari fata de backup-ul anterior si nu are sens sa tin ambele fisiere. Deci cum fac sa compar fisierul .tar curent cu fisierul .tar anterior (ultimul creat)? Mai precis, intrebarea este cum gasesc numele backup-ului anterior?
As putea sa salvez numele backup-ului intr-un fisier care sa fie suprascris la fiecare rulare si care sa ramana acolo pentru urmatoarea, dar totusi cred ca exista si o solutie de a gasi "cel mai recent fisier din director".
 
ls -t1 îți dă fișierele în ordinea modificării, câte unul pe linie, primul cel mai nou, apoi faci un head -1 pe listă ca să iei un singur rând (sau ls -t1r | tail -1)
 
Gentoo cu sysvinit si apoi openrc:
Cum fac sa am kernel log si o consola pe /dev/ttyS0 in timpul bootarii si timp de 2-3 minute dupa boot, dupa care sa fie ambele dezactivate (sau mutat pe tty1 in cazul kmsg)?
- Pot obtine kmsg pe ttyS0 cu "console=ttyS0" in kernel command line. Nu stiu cum sa dezactivez chestia asta dupa boot.
- Pot obtine consola pe ttyS0 cu agetty in inittab. Nu stiu cum o mai opresc.
Help?

PS: Exista cumva posibilitatea sa "mut" o consola virtuala (tty3) pe una fizica (ttyS0)?
 
Impredictibilitatea softului din ziua de azi ma dispera maxim! Pe vremea MSDOS... bine, bine, va zic alta data...

Deci:
Code:
root@GRAPHRT:/# zcat /proc/config.gz | grep -i devtmp
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
Pana aici bine, da?
Device-ul booteaza un init f. basic care ruleza niste scripturi numite generic "preinit".
Uite unul din ele modificat de mine ca sa fie totul f. f. evident in dmesg-ul care urmeaza:
Code:
root@GRAPHRT:/# cat /lib/preinit/31_btrfs_scan_preinit
#!/bin/sh

preinit_btrfs_scan() {
        if grep -q btrfs /proc/filesystems; then
                echo "preinit: Scanning for btrfs (default)..." > /dev/kmsg
                btrfs device scan > /dev/kmsg
                echo "preinit: Scanning for btrfs (all)..." > /dev/kmsg
                btrfs device scan -d > /dev/kmsg
                echo "preinit: Scanning for btrfs (sda)..." > /dev/kmsg
                btrfs device scan /dev/sda > /dev/kmsg
                echo "preinit: Scanning for btrfs (sdb)..." > /dev/kmsg
                btrfs device scan /dev/sdb > /dev/kmsg
                echo "preinit: Scanning for btrfs (sdc)..." > /dev/kmsg
                btrfs device scan /dev/sdc > /dev/kmsg
        fi
}

boot_hook_add preinit_main preinit_btrfs_scan
OK, da?
Scriptul asta ruleaza dupa o pauza de 10s in procesul de preinit, pauza in care device-ul intreaba daca vreau modul failsafe.

Si acum bootarea propriu-zisa (partile interesante, in ordine):
Code:
[    3.288504] devtmpfs: mounted
[    3.371642] Run /sbin/init as init process
...
[    3.829850] sd 1:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[    4.729389] sd 2:0:0:0: [sdb] 15728640 512-byte logical blocks: (8.05 GB/7.50 GiB)
[    4.763688] sd 2:0:0:0: [sdb] Attached SCSI removable disk
[    4.829468] sd 3:0:0:0: [sdc] 15728640 512-byte logical blocks: (8.05 GB/7.50 GiB)
[    4.863968] sd 3:0:0:0: [sdc] Attached SCSI removable disk
[    6.464461] sd 1:0:0:0: [sda] Attached SCSI disk
[    6.481246] init: - preinit -
...
[   17.715433] preinit: Scanning for btrfs (default)...
[   18.127570] Scanning for Btrfs filesystems
[   18.489293] preinit: Scanning for btrfs (all)...
[   18.500652] Scanning for Btrfs filesystems
[   18.812415] preinit: Scanning for btrfs (sda)...
ERROR: not a block device: /dev/sda
[   18.821518] preinit: Scanning for btrfs (sdb)...
ERROR: not a block device: /dev/sdb
[   18.830549] preinit: Scanning for btrfs (sdc)...
ERROR: not a block device: /dev/sdc
...
[   19.717100] UBIFS (ubi0:1): Mounting in unauthenticated mode
[   19.892728] UBIFS (ubi0:1): UBIFS: mounted UBI device 0, volume 1, name "rootfs_data"
[   19.940270] block: attempting to load /tmp/ubifs_cfg/upper/etc/config/fstab
[   19.954023] BTRFS: device label GRAPHRT devid 2 transid 23553 /dev/sdb scanned by block (967)
[   19.963419] BTRFS: device label GRAPHRT devid 1 transid 23553 /dev/sdc scanned by block (967)
...
[   20.057182] mount_root: switched to extroot
...
[   26.080739] BTRFS: device label RTShare devid 1 transid 127 /dev/sda scanned by block (1835)
:capu::capu::capu:
Am gasit problema si rezolvarea.
Cu CONFIG_DEVTMPFS_MOUNT, kernelul scaneaza dupa device-uri in ordinea in care le gaseste si le adauga intr-un /dev care este initial in memorie. Ceea ce nu se spune nicaieri este ca adaugarea device-urilor in /dev se opreste in momentul in care a ajuns la rootfs si monteaza /dev in el. Asadar /dev ramane fix cu ce device-uri erau prezente la momentul ala. Device-urile care sunt scanate ulterior rootfs nu mai sunt adaugate in /dev (ca se presupune ca e treaba mdev / udev / evdev), doar ca in OpenWrt, udev porneste muuuult mai tarziu si, ca urmare, apare situatia idioata de mai sus in care device-urile sunt detectate, dar nu apar in /dev.
Rezolvarea: bootwait=<secunde> in kernel command line, in loc de sleep in timpul preinit.
 
Last edited:
qemu in linux
Pornesc qemu intr-o sesiune X fara window manager (xinit /usr/bin/qemu ...). Apare imaginea guest-ului (un DOS). Fac niste partitii. Vreau reboot, dar DOS n-are comanda pentru asa ceva.
1) Cum dau CTRL+ALT+DEL in qemu?
2) Conform documentatiei, am apasat CTRL+ALT+2 pentru qemu monitor si am dat reset de acolo. Acum cum mai revin la imaginea guest-ului?? CTRL+ALT+1 nu merge.
3) Am inchis X dar qemu a ramas pe fundal. Cum fac sa il "reatasez" la un X?
 
Am doua device-uri cu cate un port serial. Pe fiecare device, serialul este, by default, consola linux (busybox). Cum as putea sa conectez serialele impreuna, astfel incat 1) sa nu interfereze unul cu celalalt, spre exemplu mesajele kernelului de pe un device sa nu fie luate drept comenzi pe celalalt device si 2) in cazul in care vreunul nu mai este accesibil prin retea, sa ma pot loga pe el, prin serial, de pe celalat device.
 
PC cu linux aflat in spatele unui router cu linux. Pentru a accesa PC-ul din afara retelei, intru intai prin ssh pe router si fac port forward pentru ssh-ul de pe PC, apoi ma conectez prin tunel la acel ssh.
Am incercat sa fac forward la X prin ssh-ul de pe PC. Se misca ca cizma.
Cum fac forward la X doar prin ssh-ul de pe router?

Serverul ssh este dropbear, atat pe router cat si pe PC. Clientul ssh este PuTTY. Serverul X este VcXsrv. Clientul banuiesc ca n-are importanta.

PS: De obicei nu pun intrebarea asta, dar... Are sens ce vreau eu sa fac aici, sau mai bine ma gandesc la:
- VNC pe PC (prin tunel ssh doar pe router)?
- port forward direct de pe router la ssh-ul de pe PC si apoi X prin ssh sau VNC prin ssh?
 
Last edited:
X11 forwarding e by design lent și ineficient peste Internet, nu e de la tunelare. Asta pentru că atunci când a fost creat, aplicațiile erau făcute să folosească primitive X11, care erau ușor de interceptat și transmis eficient. Însă aplicațiile moderne au widgets bling bling care nu mai folosesc aceste primitive, și modul de tratare în cazul ăsta este kindof screenshot trimis între client și server. Ceea ce e mult mai ineficient - nu se cunoaște în local network, dar peste Internet ai latență mult mai mare și atunci se mișcă ca cizma.

Vezi și compresie, dacă nu e enabled deja, dar nu știu cât te ajută. Soluția probabil va fi VNC sau X2go, care-s făcute de la început pentru screenshots și au optimizări mai bune legate de asta (detecție a ce s-a schimbat etc).
 
Back
Top