1 (30.04.2013 01:50:40 отредактировано animal)

Установил gentoo на zfs раздел, делюсь своей историей успеха - может кому-то будет интересно.
По следам этой темы и статьи в вики.


1. Создаём разделы. Их нужно как минимум два - загрузочный, и основной - с zfs.
При создании раздела с zfs нужно указать тип раздела (Hex Code) - BF00.

2. Создаём пул

zpool create -f -o ashift=12 -o cachefile= -O compression=on -m none -R /mnt/gentoo rpool /dev_name 
+ открыть спойлер

ashift - задаёт размер блока файловой системы в виде степеней двойки, в данном случае 4 килобайта
compression=on - включает сжатие
rpool - название пула
/dev_name - название устройства

Тут я сразу отключил дедупликацию, обновление временных меток и xattr.

zfs set dedup=off rpool
zfs set atime=off rpool
zfs set xattr=off rpool

И переключил алгоритм сжатия

zfs set compress=lzjb rpool

3. Создаём файловые системы

zfs create -o mountpoint=none rpool/ROOT
zfs create -o mountpoint=/ rpool/ROOT/gentoo

zfs create -o mountpoint=/home rpool/HOME
zfs create -o mountpoint=/root rpool/HOME/root

zfs create -o mountpoint=none rpool/GENTOO
zfs create -o mountpoint=/usr/src rpool/GENTOO/src
zfs create -o mountpoint=/var rpool/GENTOO/var

zfs create -o mountpoint=/usr/portage -o compression=off rpool/GENTOO/portage
zfs create -o mountpoint=/usr/portage/distfiles -o compression=off rpool/GENTOO/distfiles

Копируем файл  zpool.cache в новое окружение

mkdir -p /mnt/gentoo/etc/zfs
cp /etc/zfs/zpool.cache /mnt/gentoo/etc/zfs

Создаём пустой файл mtab

touch /mnt/gentoo/etc/mtab

4. Делаем chroot и дальше до сборки ядра ставим по рукакниге.
5. Сборка ядра.
Можно конечно наложить патч zfs вручную, но я думаю легче взять ебилд с автоматическим наложением нужного патча.
Добавляем оверлей init6

layman -a init6
layman -s init6

Отключаем запрет использования флага kernel-builtin для zfs и собираем geek-sources

echo 'sys-fs/zfs -kernel-builtin' >> /etc/portage/profile/package.use.mask 
echo 'sys-fs/zfs kernel-builtin' >> /etc/portage/package.use 
echo 'sys-kernel/geek-sources zfs' >> /etc/portage/package.use 
USE="zfs" emerge sys-kernel/geek-sources

Теперь собираем само ядро. Включаем SPL и ZFS (не модулями), и поддержку initrd.
Собираем ядро, после чего ставим genkernel и собираем им initramfs

emerge -av genkernel
genkernel --zfs initramfs

6. Ставим загрузчик, указываем ему ядро и inirtd, а в качестве опций - это:

real_root=ZFS=rpool/ROOT/gentoo dozfs=force

Добавляем zfs на уровень инициализации boot

rc-update add zfs boot

7. Выходим из chroot'a, отмонтируем файловые системы, экспортируем пул и перезагружаемся

exit
cd /mnt/gentoo
umount proc dev sys boot
cd /
zpool export -f rpool
reboot

2

Сколько рамы жрёт?  ag

3

free -m
             total       used       free     shared    buffers     cached
Mem:          7983       7619        364          0         28        831
-/+ buffers/cache:       6760       1223
Swap:            0          0          0

4

animal⇓ пишет:

USE="zfs" emerge sys-kernel/geek-sources

С какими флагами собрано ядро geek-sources?
Надо бы накидать хотябы опции конфига для сборки, общался с init6 - ему лень, говорит и так все понятно...
У меня сейчас так:

# emerge -pv geek-sources

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] sys-kernel/geek-sources-3.8.10:3.8.10::init6  USE="aufs bfq branding ck debian fedora ice mageia reiser4 suse uksm zfs -build -deblob -genpatches -grsecurity -lqx -pax -pf -rt -symlink -zen" 0 kB

UKSM+BFS+BFQ+AUFS+ZFS+SPL включено, если кратко... а там не только это.

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

5

У меня так:

[ebuild   R    ] sys-kernel/geek-sources-3.8.10:3.8.10::init6  USE="aufs bfq genpatches symlink uksm zfs -branding -build -ck -debian -deblob -fedora -grsecurity -ice -lqx -mageia -pax -pf -reiser4 -rt -suse -zen" 0 kB

Чем меньше патчей - тем лучше.

6

equery u geek-sources
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for sys-kernel/geek-sources-3.8.10:
 U I
 + + aufs       : AnotherUnionFS.
 - - bfq        : Budget Fair Queueing Budget I/O Scheduler.
 + + branding   : Enable Gentoo specific branding.
 - - build      : Build kernel.
 - - ck         : Enable Con Kolivas' high performance patchset.
 + + debian     : Use Debian kernel patches.
 - - deblob     : Remove binary blobs from kernel sources to provide libre license compliance.
 + + fedora     : Use Fedora kernel patches.
 + + genpatches : Use Gentoo kernel patches.
 - - grsecurity : Use grsecurity patches.
 - - ice        : Use TuxOnIce patches.
 - - lqx        : Use liquorix patches.
 + + mageia     : Use Mandriva/Mageia patches.
 - - pax        : Use PAX patches.
 - - pf         : Use pf-kernel patches.
 - - reiser4    : Use Reiser4 FS patches.
 - - rt         : Use Ingo Molnar's realtime preempt patches.
 + + suse       : Use OpenSuSE patches.
 - - symlink    : Force kernel ebuilds to automatically update the /usr/src/linux symlink
 + + uksm       : Use Ultra Kernel Samepage Merging patches.
 + + zen        : Use zen-kernel patches.
 + + zfs        : The native Linux kernel port of the ZFS filesystem.

7

animal, вот еще, планировщик - cfq или deadline поставил?

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

8

zenon пишет:

animal, вот еще, планировщик - cfq или deadline поставил?

deadline на десктопе?!

9

fragment, noop рекомендуют вроде с zfs, у неё встроенный шедулер.
http://comments.gmane.org/gmane.linux.f … .user/2044

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

10 (03.05.2013 19:12:19 отредактировано fragment)

Слушайте, у кого получилось поднять своп на zfs? У меня вот что:

libra ~ # zfs create -V 4G -b 4K zero/swap
/dev/zero/swap may not be immediately available

И всё. Сам том zero/swap создался и виден через zfs list, но вот создать на нём swapfs не получается:

libra ~ # mkswap -f /dev/zero/swap
/dev/zero/swap: Not a directory

Что сделать, чтобы он стал available?

11

fragment⇓ пишет:

Слушайте, у кого получилось поднять своп на zfs? У меня вот что:

/dev/zero - это стандартное устройство, возвращающее нули при чтении и являющееся чёрной дырой при записи...

выбери другое имя.

95% процентов проблем находятся между клавиатурой и стулом.

12

Fat-Zer пишет:
fragment⇓ пишет:

Слушайте, у кого получилось поднять своп на zfs? У меня вот что:

/dev/zero - это стандартное устройство, возвращающее нули при чтении и являющееся чёрной дырой при записи...

выбери другое имя.

Балин, точно ведь, засада. Только как я выберу пулу другое имя, если на этом пуле у меня система?

13

fragment⇓ пишет:

Только как я выберу пулу другое имя, если на этом пуле у меня система?

У тебя пул с названием zero? Ну назови zero/zswap...

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

14

zenon пишет:
fragment⇓ пишет:

Только как я выберу пулу другое имя, если на этом пуле у меня система?

У тебя пул с названием zero? Ну назови zero/zswap...

Фишка в том, что нужно будет создать swapfs на устройстве /dev/$POOL_NAME/zswap. Т.е. у меня это будет /dev/zero/zswap. А /dev/zero это как бы занятый ядром путь.

Только я вот не пойму, как тогда мой системный пул работает?

15

fragment⇓ пишет:

Фишка в том, что нужно будет создать swapfs на устройстве /dev/$POOL_NAME/zswap. Т.е. у меня это будет /dev/zero/zswap. А /dev/zero это как бы занятый ядром путь.Только я вот не пойму, как тогда мой системный пул работает?

если на нём ничего кроме корня, то он монтируется ядром самостоятельно...
а нельзя ли изменить путь к устройствам? на /dev/zfs/$POOL_NAME/ например? может их удав создаёт?

95% процентов проблем находятся между клавиатурой и стулом.

16

Fat-Zer пишет:
fragment⇓ пишет:

Фишка в том, что нужно будет создать swapfs на устройстве /dev/$POOL_NAME/zswap. Т.е. у меня это будет /dev/zero/zswap. А /dev/zero это как бы занятый ядром путь.Только я вот не пойму, как тогда мой системный пул работает?

если на нём ничего кроме корня, то он монтируется ядром самостоятельно...
а нельзя ли изменить путь к устройствам? на /dev/zfs/$POOL_NAME/ например? может их удав создаёт?

Как-то геморно и костыльно.

В общем, новый вопрос: как лучше всего переименовать пул?

17

Не нашёл у себя ничего похожего на /dev/$POOL_NAME

Может, удев не знает что нужно создавать /dev/$POOL_NAME?

18

animal⇓ пишет:

zfs create -o mountpoint=/usr/portage -o compression=off rpool/GENTOO/portage
zfs create -o mountpoint=/usr/portage/distfiles -o compression=off rpool/GENTOO/distfiles

Собственно почему компрессию на portage выключил?

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

19

Без компрессии должно быть быстрее, как мне кажется. И вообще, так в вики написано ab

20

animal пишет:

Без компрессии должно быть быстрее, как мне кажется. И вообще, так в вики написано ab

Используйте lz4, оно очень быстрое.

21 (05.05.2013 21:23:27 отредактировано zenon)

Разметка:

# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 1953525168 sectors, 931.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): DBF226A2-846C-4283-BCB5-6FD01DC64164
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1026047   500.0 MiB   8300  Linux filesystem
   2         1026048         1091583   32.0 MiB    EF02  BIOS boot partition
   3         1091584         2115583   500.0 MiB   8300  Linux filesystem
   4         2115584        65030143   30.0 GiB    8300  Linux filesystem
   5        65030144      1953525134   900.5 GiB   0700  Solaris root
# zpool create -f -o ashift=12 -o cachefile= -O compression=on -m none -R /mnt/gentoo rpool /dev/sdb5
# zfs set dedup=off rpool
# zfs set atime=off rpool
# zfs set xattr=off rpool
# zfs set compression=lz4 rpool
# zfs create -o mountpoint=/                      -o compression=off rpool/ROOT
# zfs create -o mountpoint=/usr                   -o compression=off rpool/ROOT/usr
# zfs create -o mountpoint=/usr/portage           -o compression=on  rpool/ROOT/portage
# zfs create -o mountpoint=/usr/portage/distfiles -o compression=off rpool/ROOT/distfiles
# zfs create -o mountpoint=/usr/src               -o compression=on  rpool/ROOT/src
# zfs create -o mountpoint=/var                   -o compression=on  rpool/ROOT/var
# zfs create -o mountpoint=/var/lib/layman        -o compression=on  rpool/ROOT/layman
# zfs create -o mountpoint=/home                  -o compression=on  rpool/HOME

boot

# mount -v /dev/sdb3  /mnt/gentoo/boot

Копирую уже собранный stage в /mnt/gentoo

# zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   896G  46,4G   850G     5%  1.00x  ONLINE  /mnt/gentoo
# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     0
      sdb5      ONLINE       0     0     0

errors: No known data errors
# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
rpool                 46,4G   836G   136K  none
rpool/HOME            38,4G   836G  38,4G  /mnt/gentoo/home
rpool/ROOT            8,02G   836G  99,8M  /mnt/gentoo
rpool/ROOT/distfiles  2,34G   836G  2,34G  /mnt/gentoo/usr/portage/distfiles
rpool/ROOT/layman      255M   836G   255M  /mnt/gentoo/var/lib/layman
rpool/ROOT/portage     838M   836G   838M  /mnt/gentoo/usr/portage
rpool/ROOT/src         486M   836G   486M  /mnt/gentoo/usr/src
rpool/ROOT/usr        3,80G   836G  3,80G  /mnt/gentoo/usr
rpool/ROOT/var         240M   836G   240M  /mnt/gentoo/var
# zpool export -f rpool
# reboot

В /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="dozfs=force"
# grub2-mkconfig -o /boot/grub2/grub.cfg

Все прописалось grub.cfg:

# cat /boot/grub2/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  load_env
fi
set default="0"

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod zfs
set root='hd1,gpt5'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt5 --hint-efi=hd1,gpt5 --hint-baremetal=ahci1,gpt5  04375699b6712308
else
  search --no-floppy --fs-uuid --set=root 04375699b6712308
fi
    font="/ROOT/usr@//share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=ru_RU
  insmod gettext
fi
terminal_output gfxterm
if sleep --interruptible 0 ; then
  set timeout=10
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-04375699b6712308' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root='hd1,gpt3'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt3 --hint-efi=hd1,gpt3 --hint-baremetal=ahci1,gpt3  42a6dff3-92b9-4971-83fa-73928787f87b
    else
      search --no-floppy --fs-uuid --set=root 42a6dff3-92b9-4971-83fa-73928787f87b
    fi
    echo    'Загружается Linux x86_64-3.9.0-geek …'
    linux    /kernel-genkernel-x86_64-3.9.0-geek root=ZFS=rpool/ROOT ro  dozfs=force
    echo    'Загружается начальный виртуальный диск …'
    initrd    /initramfs-genkernel-x86_64-3.9.0-geek
}
submenu 'Дополнительные параметры для Gentoo GNU/Linux' $menuentry_id_option 'gnulinux-advanced-04375699b6712308' {
    menuentry 'Gentoo GNU/Linux, с Linux x86_64-3.9.0-geek' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-x86_64-3.9.0-geek-advanced-04375699b6712308' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd1,gpt3'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt3 --hint-efi=hd1,gpt3 --hint-baremetal=ahci1,gpt3  42a6dff3-92b9-4971-83fa-73928787f87b
        else
          search --no-floppy --fs-uuid --set=root 42a6dff3-92b9-4971-83fa-73928787f87b
        fi
        echo    'Загружается Linux x86_64-3.9.0-geek …'
        linux    /kernel-genkernel-x86_64-3.9.0-geek root=ZFS=rpool/ROOT ro  dozfs=force
        echo    'Загружается начальный виртуальный диск …'
        initrd    /initramfs-genkernel-x86_64-3.9.0-geek
    }
    menuentry 'Gentoo GNU/Linux, с Linux x86_64-3.9.0-geek (режим восстановления)' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-x86_64-3.9.0-geek-recovery-04375699b6712308' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd1,gpt3'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt3 --hint-efi=hd1,gpt3 --hint-baremetal=ahci1,gpt3  42a6dff3-92b9-4971-83fa-73928787f87b
        else
          search --no-floppy --fs-uuid --set=root 42a6dff3-92b9-4971-83fa-73928787f87b
        fi
        echo    'Загружается Linux x86_64-3.9.0-geek …'
        linux    /kernel-genkernel-x86_64-3.9.0-geek root=ZFS=rpool/ROOT ro single 
        echo    'Загружается начальный виртуальный диск …'
        initrd    /initramfs-genkernel-x86_64-3.9.0-geek
    }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

Только CENSORED какая-то с локалями...

/var/log/rc.log
Хотя:

# locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=ru_RU.UTF-8
# cat /etc/env.d/02locale
LC_ALL=" "
LANG="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"

и не важно что я напишу в LC_ALL=" " - все равно ругань в логе, хотя все работает...
может /usr вынес зря?

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

22

zenon, а locale -a что говорит?

95% процентов проблем находятся между клавиатурой и стулом.

23

Fat-Zer⇓ пишет:

locale -a

# locale -a
C
en_US
en_US.iso88591
en_US.utf8
POSIX
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
russian
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

24

Устал от тормозов ext4 после года активного использования для медиа/торрентов на домашнем сервере, перевел на zfs, сейчас два раздела 300 и 800Гб, посмотрим, оперативку любит, статистика:
http://storage4.static.itmages.ru/i/13/0527/s_1369673835_8658578_a948c668a5.png
скачок использования, как раз виден.

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

25

По моим ощущениям, ZFS тормознее Ext4. А уж как он любит диск насиловать - это словами не передать.

26

По прошествии нескольких месяцев пребывания корня на ZFS, вернул его на Btrfs. Очень уж ZFS медленная на Линуксе, очень ощутимо медленнее Btrfs.

27

zenon, чем статистику делал?

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

28

animal пишет:

Без компрессии должно быть быстрее, как мне кажется. И вообще, так в вики написано

IRL иногда быстрее, иногда -- медленнее. Быстрее потому, что читать/писать нужно меньше. И если диск "медленный", т.е. медленнее читает, чем распаковывает, то в целом будет быстрее.

Например: у меня скорость 16МБ/с. Т.е. я прочитаю 160МБ за 10 сек. Однако, если зажать вдвое, получится 5сек. Тогда, и только тогда, когда
1. CPU успеет зажать 160Мб за 5сек
2. у CPU и у носителя не будет других задач (это критично для HDD, который два файла одной головкой сразу писать не умеет)
3. Хватит памяти, ибо чем лучше сжатие, те больше жрёт паковщик. xz жрёт сотни и тысячи метров памяти.
4. ну и наконец, данные такие, что их в принципе можно сжать вдвое. Вот только таких файлов практически не бывает.

Потому вика _обычно_ права, IRL сжатие на лету не даёт профита.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

29

drBatty пишет:

zenon, чем статистику делал?

Monitorix.

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

30

Fat-Zer пишет:

/dev/zero - это стандартное устройство, возвращающее нули при чтении и являющееся чёрной дырой при записи...

выбери другое имя.

Возможно, /dev/zero является "чёрной дырой" при записи, но, имхо, это певдоустройство предназначено для чтения. В качестве чёрной дыры принято использовать /dev/null

Йа тьомный эльф