Недостаточно памяти root fs lost on reboot
Там все поменял :-) Сам ен пойму в чем тут дело.
Где нужно указать, что тип рутовой фс это не рейзер а рейзер4?
В ей самой и надо!
$ cat /etc/fstab | grep reiser4
/dev/hda9 /var reiser4 defaults 0 0
/dev/hda10 /usr reiser4 defaults 0 0
/dev/hda11 /opt reiser4 defaults 0 0
.
Я так и делал. Причем /home монтируется и работает нормально (reiser4), а вот на / не получается. Вот часть из boot.msg:
Как это поменять? Или как сделать initrd так, чтобы при загруженной системе с рутовым разделом рейзер 3 указать рейзер4? Мне кажется, что в initrd проблема, или нет?
mkinitrd
usage: mkinitrd [--version] [-v] [-f] [--preload ]
[--omit-scsi-modules] [--omit-raid-modules] [--omit-lvm-modules]
[--with=] [--image-version] [--fstab=] [--nocompress]
[--builtin=] [--nopivot]
(ex: mkinitrd /boot/initrd-2.2.5-15.img 2.2.5-15)
Ну и man mkinitrd соответственно, если примера из предыдущей строчки недостаточно :)
Если опять не выйдет вкомпили поддержку для / в ядро, а не модулем. А initrd вообще выкини. Есть LiveCD с поддержкой кхм. ;) reiser4? Загрузись с него. Потом подмонтируй свой корень, зайди в него через chroot и удачи.
> при загруженной системе с рутовым разделом рейзер 3 указать рейзер4?
Признаться в это вообще не въехал.
Может быть пожалеете телепата, давно не бывшего в отпуске и покажите выхлоп от:
ls -l /boot
cat /etc/fstab
fdisk -l
cat /boot/grub/grub.conf
Кстати уж не поменяли ли вы 3 рейзер на 4 просто изменив название fs в fstab? Без всяких там mkfs.reiser4. Тогда LOL!
Ну на такой маразм я не способен, гг, хотя идея была хорошая :-)
/dev/sda3 / reiser4 defaults 1 1
title SUSE LINUX 10.0 root (hd0,0) kernel /vmlinuz root=/dev/sda3 vga=0x317 selinux=0 resume=/dev/sda2 splash=silent showopts initrd /initrd
И повторюсь, /home работает на reiser4 нормально. Хоть я и не гуру в линуксе, но и не чайник :-)
Вот что мне выдает mkinitrd -d /dev/sda3:
Module list: sata_nv generic processor thermal fan reiserfs reiser4
Kernel image: /boot/vmlinuz-2.6.13-15-default Initrd image: /boot/initrd-2.6.13-15-default Shared libs: lib/ld-2.3.5.so lib/libblkid.so.1.0 lib/libc-2.3.5.so lib/libselinux.so.1 lib/libuuid.so.1.2
Cannot determine dependencies of module reiser4. Is modules.dep up to date? Cannot determine dependencies of module reiser4. Is modules.dep up to date? Cannot determine dependencies of module reiser4. Is modules.dep up to date? Driver modules: ide-disk sd_mod sata_nv generic processor thermal fan reiser4 amd74xx Filesystem modules: reiserfs Including: klibc initramfs udev fsck.reiserfs Bootsplash: SuSE (1024x768) 8028 blocks
Kernel image: /boot/vmlinuz-2.6.13-15-default.old Initrd image: /boot/initrd-2.6.13-15-default.old
Блин, неужели программерам, которые поддерживают этот сайт трудно при сохранении поста заменять \n на
. Шо не запостишь, то уродуется.
title SUSE LINUX 10.0
root (hd0,0)
kernel /vmlinuz root=/dev/sda3 vga=0x317 selinux=0 resume=/dev/sda2 splash=silent showopts
initrd /initrd
Я просил cat /etc/fstab :( а не огрызок от него.
/boot отдельным разделом или просто каталог от корня?
Почему root (hd0,0) ? Это соответствует hda1. Не знаю как с SATA, возможно sda1. Соответственно ядро и initrd ищутся на hda1.
mkinitrd имя_файла версия_ядра то есть:
mkinitrd new-initrd 2.6.13-15-default
А вообще-то ядро это reiser4 тянет?
/dev/sda1 /boot reiserfs acl,user_xattr 1 2 /dev/system/home /home reiser4 defaults 1 2 /dev/sda3 / reiser4 defaults 1 1 /dev/sda2 swap swap defaults 0 0 /dev/hda1 /windows/C ntfs ro,users,gid=users,umask=0002,nls=utf8 0 0 /dev/hda5 /windows/D ntfs ro,users,gid=users,umask=0002,nls=utf8 0 0 /dev/hda7 /windows/F ntfs ro,users,gid=users,umask=0002,nls=utf8 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs noauto 0 0 usbfs /proc/bus/usb usbfs noauto 0 0 devpts /dev/pts devpts mode=0620,gid=5 0 0 /dev/dvdrecorder /media/dvdrecorder subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec,iocharset=utf8 0 0 /dev/cdrom /media/cdrom subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec,iocharset=utf8 0 0 /dev/fd0 /media/floppy subfs noauto,fs=floppyfss,procuid,nodev,nosuid,sync 0 0 none /subdomain subdomainfs noauto 0 0 /dev/hda2 /mnt/wf ext3 defaults 1 2
вот полностью. Ядро 2.6.13, suse 10. /boot на отдельном разделе с reiserfs 3.
Выбирай в выпадающем списке "User line break"
/dev/sda1 /boot reiserfs acl,user_xattr 1 2
/dev/system/home /home reiser4 defaults 1 2
/dev/sda3 / reiser4 defaults 1 1
/dev/sda2 swap swap defaults 0 0
/dev/hda1 /windows/C ntfs ro,users,gid=users,umask=0002,nls=utf8 0 0
/dev/hda5 /windows/D ntfs ro,users,gid=users,umask=0002,nls=utf8 0 0
/dev/hda7 /windows/F ntfs ro,users,gid=users,umask=0002,nls=utf8 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
/dev/dvdrecorder /media/dvdrecorder subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec,iocharset=utf8 0 0
/dev/cdrom /media/cdrom subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec,iocharset=utf8 0 0
/dev/fd0 /media/floppy subfs noauto,fs=floppyfss,procuid,nodev,nosuid,sync 0 0
none /subdomain subdomainfs noauto 0 0
/dev/hda2 /mnt/wf ext3 defaults 1 2
Теперь желательно получить в человеческом виде grub.conf и fdisk -l :)
Сдаётся мне, что проблемы надо искать в grub.conf
setup --stage2=/boot/grub/stage2 (hd0,0) (hd0,0) quit
title SUSE LINUX 10.0 (2nd)
kernel /vmlinuz root=/dev/hda6 vga=0x317 selinux=0
resume=/dev/sda2 splash=silent showopts
title SUSE LINUX 10.0
kernel /vmlinuz root=/dev/sda3 vga=0x317 selinux=0
resume=/dev/sda2 splash=silent showopts
Я сейчас грузусь с резервного раздела на reiserfs - точная копия того, где сейчас reiser4.
Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 217 1542240 82 Linux swap / Solaris /dev/sda3 218 6375 49464135 83 Linux
/dev/sda4 6376 30401 192988845 f W95 Ext'd (LBA) /dev/sda5 6376 30401 192988813+ 83 Linux
Disk /dev/hda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 600 4819468+ 7 HPFS/NTFS
/dev/hda2 601 2513 15366172+ 83 Linux
/dev/hda3 2514 14593 97032600 f W95 Ext'd (LBA)
/dev/hda5 2514 4808 18434556 7 HPFS/NTFS
/dev/hda6 4809 13319 68364576 83 Linux
/dev/hda7 13320 14593 10233373+ 7 HPFS/NTFS
Один раз мне удалось в однопользовательском режиме сменить рутовый раздел, перешол в init 5 - все работало прекрасно. Сразу переустановил загрузчик, сделал mkinitrd - не помогло :( При перезагрузке рутовый раздел на рейзер4 не смог примонтироваться (он все так же монтировался как рейзер3)
Заргузчик стоит на hda1, судя по setup (hd0,0) в grub.conf. Раздел, где ищется ядро тоже hda1, судя по root (hd0,0). Но, /dev/hda1 -- NTFS :) Если снять IDE диск линукс будет грузиться? Ядро с initrd лежат на /dev/sda1, который монтируется в /boot? grub надо патчить на предмет его понимания reiser4. initrd должен содержать модуль для reiser4. Ядро вы не пересобирали, следовательно наверняка всё дело в initrd. Возможно должна помочь его перегенерация.
mkinitrd --with=reiser4 /boot/initrd-2.6.13-15-default 2.6.13-15-default
Сделал. Пишет Unknown option: -- . Вот что выдает mkinitrd -h
-h This Text. -k "kernel list" List of kernel images for which initrd files
are created. Defaults to all kernels found in /boot.
-i "initrd list" List of file names for the initrd; position have match to "kernel list". Defaults to all
all kernels found in /boot. -m "module list" Modules to include in initrd. Defaults to the
INITRD_MODULES variable in /etc/sysconfig/kernel. -b boot_dir Boot directory. Defaults to /boot. -d root_device Root device. Defaults to the device from which / is mounted. Overrides the rootdev enviroment variable if set. -s size Add splash animation and bootscreen to initrd. -t tmp_dir Temporary directory. Defaults to /var/tmp. -D interface Run dhcp on the specified interface. -I interface Configure the specified interface statically. -a acpi_dsdt Attach compiled ACPI DSDT (Differentiated System Description Table) to initrd. This replaces the DSDT of the BIOS. Defaults to the ACPI_DSDT variable in /etc/sysconfig/kernel. -R Use initrd instead of initramfs. -g Use glibc instead of klibc binaries. -u Do not use udev for root device discovery. -S Load policy file for SELinux if exist. -V script Vendor specific script to run in linuxrc.
До Android 4.4 был vold.fstab, в котором можно было спокойно поменять разделы (sd карта вместо внутренней памяти), а с приходом киткат он пропал. Подскажите, возможно как то поменять разделы на 4.4?
До Android 4.4 был vold.fstab, в котором можно было спокойно поменять разделы (sd карта вместо внутренней памяти), а с приходом киткат он пропал. Подскажите, возможно как то поменять разделы на 4.4?
/[email protected] /data ext4 noatime,nosuid,nodev,noauto_da_alloc wait,check,encryptable=footer
/[email protected]_f /protect_f ext4 noatime,nosuid,nodev,noauto_da_alloc wait,check
/[email protected]_s /protect_s ext4 noatime,nosuid,nodev,noauto_da_alloc wait,check
/devices/platform/mtk-msdc.0/mmc_host auto vfat defaults voldmanaged=sdcard0:[email protected],noemulatedsd
/devices/platform/mtk-msdc.1/mmc_host auto vfat defaults voldmanaged=sdcard1:auto
Что и где нужно изменить, чтобы разделы поменялись местами? Пробовал очевидные варианты - пока не получилось.
Что и где нужно изменить, чтобы разделы поменялись местами? Пробовал очевидные варианты - пока не получилось.
Zhenchikyo,
Ну да) Ещё пробовал стирать ',noemulatedsd' - тоже не получается. Так же пробовал заменить создание симлинков в factory_init.rc (тоже в ядре) - так же ничего не дало.
/devices/platform/mtk-msdc.0/mmc_host auto vfat defaults voldmanaged=sdcard1:[email protected],noemulatedsd
/devices/platform/mtk-msdc.1/mmc_host auto vfat defaults voldmanaged=sdcard0:auto
/devices/platform/mtk-msdc.0/mmc_host auto vfat defaults voldmanaged=sdcard1:[email protected],noemulatedsd
/devices/platform/mtk-msdc.1/mmc_host auto vfat defaults voldmanaged=sdcard0:auto
/devices/platform/mtk-msdc.0/mmc_host auto vfat defaults voldmanaged=sdcard1:[email protected],noemulatedsd
/devices/platform/mtk-msdc.1/mmc_host auto vfat defaults voldmanaged=sdcard0:auto
sanek922,
Пробовал - не помогает. Сд карта вообще не монтируется - не определяется устройством.
Скопировал с одного форума,
Как поменять местами внешнюю и внутреннюю память на RK3188 Android 4.4.2 KitKat
Т.е. что бы система думала что ваша microSD это внутренняя память.
Отредактировать:
fstab.rk30board.bootmode.unknown
Должно быть так:
/dev/block/mtd/by-name/user /mnt/external_sd vfat defaults voldmanaged=external_sd:auto,noemulatedsd
/devices/platform/rk29_sdmmc.0/mmc_host/mmc /mnt/internal_sd vfat defaults voldmanaged=internal_sd:auto
fstab.rk30board.bootmode.emmc
Должно быть так:
/dev/block/platform/emmc/by-name/user /mnt/external_sd vfat defaults voldmanaged=external_sd:auto,noemulatedsd
/devices/platform/rk29_sdmmc.0/mmc_host/mmc /mnt/internal_sd vfat defaults voldmanaged=internal_sd:auto
Собрать обратно и прошить.
Да, способ работает. Поменял местами внутреннюю и внешнюю SD на клоне Chuwi V88 с прошивкой OMA 3.1 KitKat.
Разбирал и собирал boot.img на Windows 7 с помощью RK3xxx_firmware_tools_5.10.28.00
Правил файлы fstab.rk30board.bootmode.unknown и fstab.rk30board.bootmode.emmc с помощью AkelPad.
Прошил измененный boot.img (остальные галочки снял) с помощью RKAndroidTool v1.37.
Правленый boot.img
Farton,
Это уневерсальный бут? Пойдет ли он на galaxy gio s5660 с cyanogenmod 11, который по сути тоже считается 4,4 версией?
Сергей, появилась проблема. Файла (vold.fstab), о котором говорится в видео нет в папке etc. Может на oysters он где-то еще?
Сергей, кажется нашел, но при сохранения отредактированного файла пишет ошибку: Недостаточно памяти!/(root fs lost on reboot)
Илья, просмотрел несколько тем в инете, файл vold.fstab в Oysters T72 3G находиться в /system/etc/vold.fstab
Попробуй другим Фменеджером поискать
Там нет этого файла можешь не искать! Всё намного сложнее чем кажется! Разработчики на славу постарались!
Илья, вот еще что нарыл на 4пда :
После долгой ночи мучений(получение кирпича 2 раза и т.д) значит подмену памяти для данного аппарата я все таки осуществил благодаря готовому boot.img, который выкладывал n-bear, за что ему огромное спасибо.
Лежит оно по этой ссылке Ядра и мод. рекавери под названием NB_T72HRi_mem_change_v2_boot.img
Прошивал с помощью MTK Droid Root &Tools. И все бы даже очень неплохо и отлично если не одно НО, во первых не работает менюшка память в Настройках, он просто пишет ошибку и вылетает на главный экран. Во вторых
при подключении к компьютеру планшет не видно а при указывании usb накопителя долгий кружочек загрузки ни к чему не приводит. Тем не менее в ES проводнике показывает одну только флешку собственно внешнюю, которая и является диском для записи по умолчанию, и скачав несколько массивных приложений вроде Hearthsone убедился что установка действительно идет именно на внешний накопитель. Мне данный способ подходит, остальных минусов пока не увидел. Само собой для сброса данного бута придется шить через сп флэштул.
Т.к. у меня /boot, /var, /tmp, /opt и /home находятся на отдельных разделах, то неясно почему вдруг корень так забит. У меня есть предположение, что каким-то образом они не примонтированы и файлы реально пишутся в корень, хотя должны быть на соответствующих разделах. Но, в таком случае, эти каталоги должны быть не примонтированы, а это не так:
Есть идеи что не так и как с этим разобраться?
P.S. Возможно, что это важно, но / и /boot находятся на отдельном винте, который SSD.
Используй du, может у тебя логами все забило.
Часто обновляешься? Кэш чистил?
да удалите все из
все равно не читаете ;)
Логи в /var/log обычно, а он на отдельном разделе. В любом случае, это вряд ли из-за них:
Нет, не часто. Кэш не чистил, но, думаю, что он не причем — кэш apt-а находится в /var, который на отдельном разделе. На всякий случай проверил: /var/cache/apt занимает 316 МБ
У меня весь /usr 2.7 ГБ занимает. Думаю, что дело не в /usr
От рута выхлоп du -xs /* в студию!
Почисти /dev/sda2 (хотя бы sudo apt-get clean), а если не получится удалить достаточно, то отключи напоминалку:
sudo apt-get install -y dconf-tools && dconf-editor
Потом просто снять галочку:
org > gnome > settings-deamon > plugins > housekeeping
Посмотри использование пространства на диске baobab'ом. Ну и взгляни на всякий случай на df -i.
вы du и df не сравнивайте - они разное показывают. Удаляйте доки!
Уже смотрел. Даже под sudo его запускал (нагуглил где-то в интернете), думал, что увижу что-нибудь чего не видно обычным юзером.
Перезагрузись: у тебя что-то использует большой файл, который ты удалил.
Сам ведь видишь, что размер корня по du не соответствует размеру по df!
Набери еще: du -hxs / от рута
Странный вывод для du -x, посмотри внутрь каталогов /var и т.д. при отмонтированных системах. Возможно, в них что-то лежит и при монтировании прячется.
Если не секрет, зачем такая разметка?
Пройдись по sda2 fsck'ом.
Хотя где-то на задворках памяти у меня всплывают воспоминания о похожем баге какой-то FS. (Возможно даже ext4, по крайней мере быстрый гуглёж говорит, что ты не единственный с похожей проблемой: «место есть, а места нет».)
beastie ★★★★★ ( 06.09.13 01:58:44 )
Последнее исправление: beastie 06.09.13 02:03:08 (всего исправлений: 3)
Хм-м. вообще говоря, у меня была однажды такая ситуация на Генте, что место должно было быть, но пропало не пойми куда. То ли на ext3, то ли на ext4. Хорошо так пропало, десятки гигабайт. Спрашивал на ЛОРе, причина не нашлась, помогло только архивирование всего на отдельный диск, переформатирование и восстановление.
Но для начала рекомендую сделать fsck. И запостить сюда свой /etc/fstab, может, там какие-то крокодилы.
Иногда помогает осмотр при помощи baobab или gdmap. Но в этом случае вряд ли, тут расчёты du и df, я гляжу, не сходятся, скорее всего, проблема в ФС или в том, как они монтируются.
proud_anon ★★★★★ ( 06.09.13 04:02:47 )
Последнее исправление: proud_anon 06.09.13 04:08:22 (всего исправлений: 2)
Перезагрузись: у тебя что-то использует большой файл, который ты удалил.
Это не помогает. Проблема постояннно воспроизводится.
Если не секрет, зачем такая разметка?
У меня корень на SSD, а остальные данные на HDD. Соответственно, чтобы не убивать SSD и из-за того, что на нём всего 16 Гб, я вынес разделы с интенсивной записью, либо занимающие много места (например, /home).
После бута всё остальные nftables правила функционируют, за исключением dnat.
Если потом сделать systemctl restart nftables , то и dnat начинает работать как надо. Т.е. правило-то в порядке (наверное). Но что же теперь, костылик приделывать для дополнительного рестарта после всего?
Почему dnat сразу не работает, где накосячено?
сразу после загрузки
запускаю guest, dnat к нему не работает, при этом filter работает (специально подвесил нечто слушающее на один из портов для проверки)
сразу после systemctl restart nftables dnat функционирует
А в nftables.conf что?
ip6 отключен, посему nftables.conf невелик:
Если зарестартить nftables не меняя конфига, то dnat работает. Непонятное: почему при том же самом конфиге dnat не работает сразу.
Непонятное: почему при том же самом конфиге dnat не работает сразу.
Порядок сервисов например, в момент применения правил на старте интерфейс недоступен или что-то еще важное (как ipfrowarding). А когда ты запускаешь - уже доступен.
Засунь в rc.local (или что там щас вместо него чисто запускается, без говна в виде systemd) который последним стартует - проверь.
zgen ★★★★★ ( 20.03.21 15:16:13 )
Последнее исправление: zgen 20.03.21 15:17:17 (всего исправлений: 2)
Порядок сервисов например, в момент применения правил на старте интерфейс недоступен
Сам про это думал. Но что же получается, при любом изменении (старт-стопе виртуалки, например) рестартить nftables «на всякий случай»? Некошерно как-то.
Зарестартить nftables не сложно, интересно было понять глубинные причины почему все правила применяются, за исключением dnat.
А зачем в input 1234 accept?
Порты в виртуалку надо пробрасывать через libvirt hook, на момент старта nftables у тебя врядли запущена виртуалка с обвязкой.
Заголовок отвращает помогать, если честно.
zemidius ★ ( 20.03.21 17:03:07 )
Последнее исправление: zemidius 20.03.21 17:04:22 (всего исправлений: 2)
zgen подсказал про sysctl и в частности про net.ipv4.ip_forward
Я бы после загрузки и проверки неработоспособности dnat сделал бы sysctl net >set1
Потом перезапустил nftables и сделал sysctl net >set2
После чего сравнил результаты.
Заголовок отвращает помогать, если честно.
Спасибо, учту и это и про input, но надо ведь хоть как-то заманить население, просто на nftables никто не среагирует, а на клоуна все хотят посмотреть.
Порты в виртуалку надо пробрасывать через libvirt hook
А почему «надо»? Есть какие-то специальные соображения? Моя теоретическая база по очень многим вопросам сильно страдает.
vel
оно есть 1. sysctl попробую, благодарю
А почему «надо»? Есть какие-то специальные соображения
Я ж написал сразу, почему.
на момент старта nftables у тебя врядли запущена виртуалка с обвязкой
Да, именно так, libvirt уже потом стартует. Однако, если после бута зарестартить nftables еще до запуска guest, то оно работает. Не очень понимаю всёравно, почему dnat не работает, указан же просто ip безотносительно в сервису (котрый ещё не стартовал)
Но вопрос перешёл в разряд академического интереса, на практике проще зарестартить nftables.
Однако, если после бута зарестартить nftables еще до запуска guest, то оно работает.
Под «обвязкой» я подразумевал сеть libvirt. На практике надо чуть поднапрячься один раз и сделать правильно (и далее размножать это «правильно»), чем лепить костыли в виде рестарта nftables в конце загрузки.
Но вопрос перешёл в разряд академического интереса, на практике проще зарестартить nftables.
Если академический интерес, то топай читать документацию, как делать правильно исходя из окружения твоего дистрибутива и понятия ментейнеров твоего дистра о том, как делать правильно.
А если просто на кнопки потыкать как попало, то конечно работать нормально не будет.
Благодарю, именно этим в данный момент уже занимаюсь.
А, ну да. Во-первых, смотри логи, там наверняка есть ругань про цепочку. Во-вторых, опусти libvirt и сделай рестарт nftables, сэмулируешь ошибку.
zemidius ★ ( 21.03.21 02:32:38 )
Последнее исправление: zemidius 21.03.21 02:32:50 (всего исправлений: 1)
Причина в /etc/libvirt/qemu/networks/…xml и прилетающие новые правила при
Если не сложно, подскажи как решил?
Как по ссылке – грохнул нат и поставил бридж и дальше по списку?
С такой же бедой встрял, что-то котелок уже совсем не варит. :(
libvirt при старте засовывает свои правила. Как это убрать никто не знает, знать не хочет и, судя по всему, пилителей либвирта это устраивает и допиливать они ничего не желают.
«Самое простое» это не использовать nat от libvirt. А то что вы написали это костылестроение.
Получилось все-таки без рестартов сделать, как по либвиртовой вики:
Про nftables не совсем понял: он как будто бы есть у меня, при этом сервис стартует и сразу тухнет. На момент написания моего поста у меня все заваливалось из-за пропущенного двойного дэша перед dport.
В общем работает, но есть что еще поизучать. :)
Так эта, таво… iptables (в скрипте написано) или nftables. Наверное одно из двух.
anc
Не помню, почему nat оставил, значит был какой-то повод. Хуки у меня не заработали, наверное плохо старался. Ну и я же честно сразу признался, что это костылик. Но простой.
Читайте также: