====== Instalación ====== Instalamos debian 11 Añadimos sources: /etc/apt/sources.list deb http://deb.debian.org/debian/ bullseye main contrib non-free deb-src http://deb.debian.org/debian/ bullseye main main contrib non-free deb http://security.debian.org/debian-security bullseye-security main contrib deb-src http://security.debian.org/debian-security bullseye-security main contrib Instalamos paquetes necesarios apt-get update apt install linux-headers-"$(uname -r)" linux-image-amd64 apt install zfs-dkms zfsutils-linux Habilitamos servicios de ZFS y reiniciamos systemctl enable zfs.target systemctl enable zfs-import cache systemctl enable zfs-mount systemctl enable zfs-import.target systemctl enable zfs-import-scan systemctl enable zfs-share Miramos los pool de zfs (no habrá ninguno) zpool list Miramos el id de los discos, en mi caso tengo 4 discos de 8tb: ls -l /dev/disk/by-id lrwxrwxrwx 1 root root 9 Dec 12 23:46 ata-Samsung_SSD_850_EVO_120GB_S21UNSBG127800D -> ../../sdg lrwxrwxrwx 1 root root 10 Dec 12 23:46 ata-Samsung_SSD_850_EVO_120GB_S21UNSBG127800D-part1 -> ../../sdg1 lrwxrwxrwx 1 root root 10 Dec 12 23:46 ata-Samsung_SSD_850_EVO_120GB_S21UNSBG127800D-part2 -> ../../sdg2 lrwxrwxrwx 1 root root 10 Dec 12 23:46 ata-Samsung_SSD_850_EVO_120GB_S21UNSBG127800D-part5 -> ../../sdg5 lrwxrwxrwx 1 root root 9 Dec 12 23:46 ata-ST8000DM004-2CX188_WCT37KFE -> ../../sdb lrwxrwxrwx 1 root root 9 Dec 12 23:46 ata-ST8000DM004-2CX188_WCT38QL5 -> ../../sdf lrwxrwxrwx 1 root root 9 Dec 12 23:46 ata-ST8000DM004-2CX188_WCT38Y6B -> ../../sdc lrwxrwxrwx 1 root root 9 Dec 12 23:46 ata-ST8000DM004-2CX188_ZCT1KCM9 -> ../../sda lrwxrwxrwx 1 root root 9 Dec 12 23:46 usb-HP_iLO_Internal_SD-CARD_000002660A01-0:0 -> ../../sde lrwxrwxrwx 1 root root 10 Dec 12 23:46 usb-HP_iLO_Internal_SD-CARD_000002660A01-0:0-part1 -> ../../sde1 lrwxrwxrwx 1 root root 9 Dec 12 23:46 usb-Verbatim_STORE_N_GO_07930DA70298-0:0 -> ../../sdd lrwxrwxrwx 1 root root 9 Dec 12 23:46 wwn-0x5000c500c520c2f7 -> ../../sda lrwxrwxrwx 1 root root 9 Dec 12 23:46 wwn-0x5000c500cf855885 -> ../../sdc lrwxrwxrwx 1 root root 9 Dec 12 23:46 wwn-0x5000c500cf875876 -> ../../sdf lrwxrwxrwx 1 root root 9 Dec 12 23:46 wwn-0x5000c500cf8fda13 -> ../../sdb lrwxrwxrwx 1 root root 9 Dec 12 23:46 wwn-0x5002538da01151be -> ../../sdg lrwxrwxrwx 1 root root 10 Dec 12 23:46 wwn-0x5002538da01151be-part1 -> ../../sdg1 lrwxrwxrwx 1 root root 10 Dec 12 23:46 wwn-0x5002538da01151be-part2 -> ../../sdg2 lrwxrwxrwx 1 root root 10 Dec 12 23:46 wwn-0x5002538da01151be-part5 -> ../../sdg5 Son los discos ata-ST8000DM004-XXXXX_XXXXX que corresponden a sdb, sdf, sdc y sda. Cogemos los wwx-XXXXXX que son: wwn-0x5000c500c520c2f7 wwn-0x5000c500cf855885 wwn-0x5000c500cf875876 wwn-0x5000c500cf8fda13 Cremos el pool en el directorio dades zpool create -o ashift=12 -O acltype=posixacl -O compression=lz4 -O relatime=on -O xattr=sa dades raidz1 wwn-0x5000c500c520c2f7 wwn-0x5000c500cf855885 wwn-0x5000c500cf875876 wwn-0x5000c500cf8fda13 Ya está creado: zpool status pool: dades state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM dades ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 wwn-0x5000c500c520c2f7 ONLINE 0 0 0 wwn-0x5000c500cf855885 ONLINE 0 0 0 wwn-0x5000c500cf875876 ONLINE 0 0 0 wwn-0x5000c500cf8fda13 ONLINE 0 0 0 errors: No known data errors ====== Tunning ====== Voy a decir que la swap no salte al no ser que use el 90% porque zfs coge mucha memoria. Por defecto vienen al 40% sysctl vm.swappiness vm.swappiness = 60 Añado al final de: /etc/sysctl.conf vm.swappiness=10 Como tengo 16Gb de RAM, le digo que use 12gbs, Por defecto tiene 7.7Gb arc_summary | grep "Target size " Target size (adaptive): 100.0 % 7.7 GiB Añadimos a la configuración de zfs 12Gb que son 12*1024*1024*1024=12884901888 /etc/modprobe.d/zfs.conf options zfs zfs_arc_max=12884901888 zfs_prefetch_disable=1 Miramos la caché. Instalamos sdparm apt-get install sdparm Miramos un disco: sdparm /dev/sda /dev/sda: ATA ST8000DM004-2CX1 0001 Read write error recovery mode page: AWRE 1 [cha: n, def: 1] ARRE 0 [cha: n, def: 0] PER 0 [cha: n, def: 0] Caching (SBC) mode page: IC 0 [cha: n, def: 0] WCE 1 [cha: y, def: 1] RCD 0 [cha: n, def: 0] Control mode page: TST 0 [cha: n, def: 0] SWP 0 [cha: n, def: 0] En caching, dentro de WCE tiene que tener def a 1 como lo tiene: WCE 1 [cha: y, def: 1] Reiniciamos y comprobamos los valores: sysctl vm.swappiness vm.swappiness = 10 arc_summary | grep "Target size " Target size (adaptive): 100.0 % 12.0 GiB ====== Cambio de disco ====== Primero lo marco offline: zpool offline dades wwn-0x5000c500c520c2f7 Vemos como queda el pool: zpool status pool: dades state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scan: none requested config: NAME STATE READ WRITE CKSUM dades DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 wwn-0x5000c500c520c2f7 OFFLINE 0 0 0 wwn-0x5000c500cf855885 ONLINE 0 0 0 wwn-0x5000c500cf875876 ONLINE 0 0 0 wwn-0x5000c500cf8fda13 ONLINE 0 0 0 errors: No known data errors Apagamos el servidor y cambiamos el disco, en este caso era el sda. Miramos el nuevo id ls -l /dev/disk/by-id| grep sda lrwxrwxrwx 1 root root 9 Dec 12 21:26 ata-ST8000AS0002-1NA17Z_Z840BE4L -> ../../sda lrwxrwxrwx 1 root root 10 Dec 12 21:26 ata-ST8000AS0002-1NA17Z_Z840BE4L-part1 -> ../../sda1 lrwxrwxrwx 1 root root 9 Dec 12 21:26 wwn-0x5000c50087752765 -> ../../sda lrwxrwxrwx 1 root root 10 Dec 12 21:26 wwn-0x5000c50087752765-part1 -> ../../sda1 Al hacer el replace puede que tengamos que forzar si el disco ya pertenecia a un raid, se hace con -f: zpool replace -f dades wwn-0x5000c500c520c2f7 wwn-0x5000c50087752765 Miramos el estado. Como había poco contenido dice que tardará 43 segundos, que es lo que ha tardado: zpool status pool: dades state: DEGRADED status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Sat Dec 12 21:28:46 2020 22.0G scanned at 3.15G/s, 3.08G issued at 450M/s, 22.0G total 782M resilvered, 13.97% done, 0 days 00:00:43 to go config: NAME STATE READ WRITE CKSUM dades DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 replacing-0 DEGRADED 0 0 0 wwn-0x5000c500c520c2f7 OFFLINE 0 0 0 wwn-0x5000c50087752765 ONLINE 0 0 0 (resilvering) wwn-0x5000c500cf855885 ONLINE 0 0 0 wwn-0x5000c500cf875876 ONLINE 0 0 0 wwn-0x5000c500cf8fda13 ONLINE 0 0 0 errors: No known data errors Lo volvemos a mirar y ya está online: zpool status pool: dades state: ONLINE scan: resilvered 13.2G in 0 days 00:02:04 with 0 errors on Sat Dec 12 22:14:11 2020 config: NAME STATE READ WRITE CKSUM dades ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 wwn-0x5000c50087752765 ONLINE 0 0 0 wwn-0x5000c500cf855885 ONLINE 0 0 0 wwn-0x5000c500cf875876 ONLINE 0 0 0 wwn-0x5000c500cf8fda13 ONLINE 0 0 0 errors: No known data errors ====== NFS ====== Instalamos NFS: apt install nfs-kernel-server Compartimos recurso: zfs set sharenfs=no_subtree_check,no_root_squash,async,rw=@192.168.1.0/24 dades Lo comprobamos: zfs get sharenfs dades NAME PROPERTY VALUE SOURCE dades sharenfs no_subtree_check,no_root_squash,async,rw=@192.168.1.0/24 local Desde otro servidor (tenemos que tener instalado nfs-common) apt-get install nfs-common showmount -e 192.168.1.76 Export list for 192.168.1.76: /dades 192.168.1.0/24 ====== Instalación FTP ====== Lo haremos con docker. Primero instalamos docker: sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - apt-key fingerprint 0EBFCD88 add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ buster \ stable" apt-get update apt-get install docker-ce docker-ce-cli containerd.io Docker compose: sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker run --rm --name ftp_server -d -p 21:21 -p 21000-21010:21000-21010 -v /dades/jandro:/ftp/jandro -e USERS="user|password" -e ADDRESS=ftp.lobo99.info delfer/alpine-ftp-server ====== Pruebas de velocidad ====== Las hacemos con la aplicación fio, la instalamos: apt-get install fio ===== Local ===== Escritura 260 IOPS Creamos un fichero de 16gbs: cd /dades fio --size=16G --name=create --filename=fio_file --bs=1M --nrfiles=1 --direct=0 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 --iodepth=200 --ioengine=libaio --fallocate=none create: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=200 fio-3.21 Starting 1 process create: Laying out IO file (1 file / 16384MiB) Jobs: 1 (f=1): [F(1)][100.0%][eta 00m:00s] create: (groupid=0, jobs=1): err= 0: pid=198903: Sat Dec 12 22:44:59 2020 write: IOPS=260, BW=261MiB/s (273MB/s)(16.0GiB/62844msec); 0 zone resets slat (usec): min=417, max=24224, avg=3121.52, stdev=1499.31 clat (usec): min=10, max=1442.9k, avg=698492.10, stdev=205388.14 lat (msec): min=3, max=1448, avg=701.62, stdev=206.26 clat percentiles (msec): | 1.00th=[ 201], 5.00th=[ 243], 10.00th=[ 451], 20.00th=[ 600], | 30.00th=[ 651], 40.00th=[ 684], 50.00th=[ 701], 60.00th=[ 726], | 70.00th=[ 760], 80.00th=[ 827], 90.00th=[ 936], 95.00th=[ 1011], | 99.00th=[ 1301], 99.50th=[ 1435], 99.90th=[ 1435], 99.95th=[ 1435], | 99.99th=[ 1435] bw ( KiB/s): min=114459, max=991232, per=100.00%, avg=288007.45, stdev=101346.60, samples=115 iops : min= 111, max= 968, avg=281.17, stdev=98.98, samples=115 lat (usec) : 20=0.01% lat (msec) : 4=0.01%, 10=0.01%, 20=0.02%, 50=0.04%, 100=0.07% lat (msec) : 250=5.21%, 500=7.21%, 750=54.96%, 1000=26.78%, 2000=5.69% cpu : usr=9.03%, sys=16.29%, ctx=168107, majf=0, minf=15 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.2%, >=64=99.6% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1% issued rwts: total=0,16384,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=200 Run status group 0 (all jobs): WRITE: bw=261MiB/s (273MB/s), 261MiB/s-261MiB/s (273MB/s-273MB/s), io=16.0GiB (17.2GB), run=62844-62844msec Nos quedamos con la línea 7 que dice que son 260 IOPS write: IOPS=260, BW=261MiB/s (273MB/s)(16.0GiB/62844msec); 0 zone resets Provem 4 processos de lectura y escriptura: Lectura 418 IOPS: fio --time_based --name="$(hostname).randread" --size=16G --runtime=30 --filename=fio_file --ioengine=libaio --randrepeat=0 --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 --numjobs=4 --rw=randread --blocksize=8k --group_reporting nas.randread: (g=0): rw=randread, bs=(R) 8192B-8192B, (W) 8192B-8192B, (T) 8192B-8192B, ioengine=libaio, iodepth=128 ... fio-3.21 Starting 4 processes Jobs: 4 (f=4): [r(4)][100.0%][r=3496KiB/s][r=437 IOPS][eta 00m:00s] nas.randread: (groupid=0, jobs=4): err= 0: pid=269572: Sat Dec 12 22:46:28 2020 read: IOPS=418, BW=3346KiB/s (3426kB/s)(98.1MiB/30026msec) slat (usec): min=8, max=391677, avg=9551.50, stdev=17207.97 clat (usec): min=10, max=2366.9k, avg=1164430.92, stdev=264881.17 lat (msec): min=7, max=2384, avg=1173.98, stdev=266.34 clat percentiles (msec): | 1.00th=[ 300], 5.00th=[ 844], 10.00th=[ 944], 20.00th=[ 1020], | 30.00th=[ 1070], 40.00th=[ 1099], 50.00th=[ 1150], 60.00th=[ 1183], | 70.00th=[ 1234], 80.00th=[ 1284], 90.00th=[ 1418], 95.00th=[ 1687], | 99.00th=[ 2089], 99.50th=[ 2140], 99.90th=[ 2165], 99.95th=[ 2198], | 99.99th=[ 2333] bw ( KiB/s): min= 928, max= 5600, per=100.00%, avg=3437.96, stdev=220.98, samples=220 iops : min= 116, max= 700, avg=429.75, stdev=27.62, samples=220 lat (usec) : 20=0.03% lat (msec) : 10=0.02%, 20=0.01%, 50=0.04%, 100=0.25%, 250=0.56% lat (msec) : 500=1.02%, 750=1.23%, 1000=13.63%, 2000=81.79%, >=2000=1.42% cpu : usr=0.08%, sys=0.86%, ctx=4704, majf=0, minf=1073 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.3%, 16=0.5%, 32=1.0%, >=64=98.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1% issued rwts: total=12558,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=128 Run status group 0 (all jobs): READ: bw=3346KiB/s (3426kB/s), 3346KiB/s-3346KiB/s (3426kB/s-3426kB/s), io=98.1MiB (103MB), run=30026-30026msec Escriptura (409 IOPS): fio --time_based --name="$(hostname).randwrite" --size=16G --runtime=30 --filename=fio_file --ioengine=libaio --randrepeat=0 --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 --numjobs=4 --rw=randwrite --blocksize=8k --group_reporting nas.randwrite: (g=0): rw=randwrite, bs=(R) 8192B-8192B, (W) 8192B-8192B, (T) 8192B-8192B, ioengine=libaio, iodepth=128 ... fio-3.21 Starting 4 processes Jobs: 4 (f=4): [w(4)][100.0%][w=1729KiB/s][w=216 IOPS][eta 00m:00s] nas.randwrite: (groupid=0, jobs=4): err= 0: pid=269629: Sat Dec 12 22:47:54 2020 write: IOPS=409, BW=3277KiB/s (3355kB/s)(96.1MiB/30025msec); 0 zone resets slat (usec): min=12, max=859027, avg=9751.32, stdev=28939.98 clat (usec): min=10, max=2770.9k, avg=1202311.14, stdev=522285.60 lat (msec): min=10, max=2782, avg=1212.06, stdev=524.35 clat percentiles (msec): | 1.00th=[ 215], 5.00th=[ 642], 10.00th=[ 735], 20.00th=[ 818], | 30.00th=[ 877], 40.00th=[ 927], 50.00th=[ 995], 60.00th=[ 1099], | 70.00th=[ 1368], 80.00th=[ 1703], 90.00th=[ 2089], 95.00th=[ 2232], | 99.00th=[ 2500], 99.50th=[ 2601], 99.90th=[ 2668], 99.95th=[ 2702], | 99.99th=[ 2769] bw ( KiB/s): min= 432, max= 7168, per=100.00%, avg=3419.70, stdev=401.51, samples=216 iops : min= 54, max= 896, avg=427.37, stdev=50.21, samples=216 lat (usec) : 20=0.03% lat (msec) : 20=0.04%, 50=0.14%, 100=0.25%, 250=0.70%, 500=0.97% lat (msec) : 750=9.44%, 1000=39.76%, 2000=36.13%, >=2000=12.54% cpu : usr=0.12%, sys=0.89%, ctx=4456, majf=0, minf=61 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.3%, 16=0.5%, 32=1.0%, >=64=98.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1% issued rwts: total=0,12298,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=128 Run status group 0 (all jobs): WRITE: bw=3277KiB/s (3355kB/s), 3277KiB/s-3277KiB/s (3355kB/s-3355kB/s), io=96.1MiB (101MB), run=30025-30025msec ===== Remoto ===== SCP: 5.6G 105.0MB/s 00:54 16GB 104.2MB/s 02:37 NFS: Montamos el recurso: mount 192.168.1.76:/dades /mnt/nfs/ Copiamos los ficheros: time cp fitxer /mnt/nfs 5.6G real 0m53.395s 16GB real 2m33.965s FTP: Desde una conexión 100Mbps/100Mbps 1.6Gb (1718558720 bytes) sent in 132.96 secs (12.3269 MB/s) 5.5Gb (5864260625 bytes) sent in 453.54 secs (12.3311 MB/s) Desde una conexión 552Mbps/573Mbps 1Gb (1073741824 bytes) sent in 23.7 secs (45279.08 Kbytes/sec) 5Gb (5368709120 bytes) sent in 110 secs (48596.40 Kbytes/sec)