25-01#

stop docker daemon#

stop

systemctl disable --now docker.socket
systemctl disable --now docker.service

start

systemctl enable --now docker.socket
systemctl enable --now docker.service

fio on Lexar SSD NM620 1TB#

Hardware: ./src/25-01-lshw.txt

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

output

test: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
fio-3.36
Starting 1 process
test: Laying out IO file (1 file / 4096MiB)
Jobs: 1 (f=1): [m(1)][100.0%][r=543MiB/s,w=182MiB/s][r=139k,w=46.6k IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=424112: Mon Jan 13 08:43:59 2025
  read: IOPS=136k, BW=533MiB/s (559MB/s)(3070MiB/5761msec)
   bw (  KiB/s): min=362400, max=574160, per=100.00%, avg=545994.18, stdev=61326.23, samples=11
   iops        : min=90600, max=143540, avg=136498.55, stdev=15331.56, samples=11
  write: IOPS=45.6k, BW=178MiB/s (187MB/s)(1026MiB/5761msec); 0 zone resets
   bw (  KiB/s): min=120832, max=191488, per=100.00%, avg=182653.09, stdev=20663.38, samples=11
   iops        : min=30208, max=47872, avg=45663.27, stdev=5165.84, samples=11
  cpu          : usr=8.99%, sys=32.31%, ctx=445836, majf=0, minf=9
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.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.1%, >=64=0.0%
     issued rwts: total=785920,262656,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: bw=533MiB/s (559MB/s), 533MiB/s-533MiB/s (559MB/s-559MB/s), io=3070MiB (3219MB), run=5761-5761msec
  WRITE: bw=178MiB/s (187MB/s), 178MiB/s-178MiB/s (187MB/s-187MB/s), io=1026MiB (1076MB), run=5761-5761msec

Disk stats (read/write):
  nvme0n1: ios=761308/254528, sectors=6090464/2036728, merge=0/17, ticks=282031/65740, in_queue=347788, util=76.04%

Samsung SSD 990 EVO Plus 1TB#

hardware

product: Samsung SSD 990 EVO Plus 1TB
version: 1B2QKXG7
serial: S7U4NJ0XB47526R
capabilities: nvme nvm_express bus_master cap_list
configuration: driver=nvme latency=0 nqn=nqn.1994-11.com.samsung:nvme:990EVOPlus:M.2:S7U4NJ0XB47526R state=live

command

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

output

test: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
fio-3.36
Starting 1 process
test: Laying out IO file (1 file / 4096MiB)
Jobs: 1 (f=1): [m(1)][-.-%][r=1365MiB/s,w=458MiB/s][r=349k,w=117k IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=7071: Mon Jan 13 15:54:53 2025
  read: IOPS=328k, BW=1281MiB/s (1344MB/s)(3070MiB/2396msec)
   bw (  MiB/s): min= 1161, max= 1383, per=99.96%, avg=1280.73, stdev=96.96, samples=4
   iops        : min=297352, max=354188, avg=327868.00, stdev=24821.66, samples=4
  write: IOPS=110k, BW=428MiB/s (449MB/s)(1026MiB/2396msec); 0 zone resets
   bw (  KiB/s): min=396392, max=473176, per=100.00%, avg=439448.00, stdev=33745.24, samples=4
   iops        : min=99098, max=118294, avg=109862.00, stdev=8436.31, samples=4
  cpu          : usr=18.16%, sys=72.48%, ctx=106271, majf=0, minf=9
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.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.1%, >=64=0.0%
     issued rwts: total=785920,262656,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: bw=1281MiB/s (1344MB/s), 1281MiB/s-1281MiB/s (1344MB/s-1344MB/s), io=3070MiB (3219MB), run=2396-2396msec
  WRITE: bw=428MiB/s (449MB/s), 428MiB/s-428MiB/s (449MB/s-449MB/s), io=1026MiB (1076MB), run=2396-2396msec

Disk stats (read/write):
  nvme1n1: ios=709451/237370, sectors=5675608/1898960, merge=0/0, ticks=50863/2103, in_queue=52965, util=67.55%

rsync complete machine + fix grub EFI#

https://superuser.com/a/1185401

rsync -axHAWXS --numeric-ids --info=progress2 / /media/felix/samsung990/

# mount stuff
target_dir=/media/felix/samsung990/
mount -t proc proc ${target_dir}/proc  # for bash completion
mount --bind /dev ${target_dir}/dev
mount -t sysfs sysfs ${target_dir}/sys
chroot /media/felix/samsung990/

# efi
mount -t efivarfs none /sys/firmware/efi/efivars
efibootmgr

# mount /boot/efi
mount /dev/nvme1n1p1 /boot/efi/

grub-install /dev/nvme1n1
ls /boot/efi/EFI/
update-grub

mv /etc/default/grub.d/50_linuxmint.cfg /var/backups/  # overwrites GRUB_DISTRIBUTOR and GRUB_DISABLE_OS_PROBER
v /etc/default/grub  # edit GRUB_DISTRIBUTOR to change name
update-grub
view /boot/grub/grub.cfg  # review

Read about /etc/default/grub:

info -f grub -n 'Simple configuration'

I believe in mise#

I love the developer experience of mise.

That’s why I am currently porting a lot of projects to use it, for example:

  • Python projects with Python provided by mise and integration with uv.

  • Terraform/OpenTofu projects

  • CLI tools that I use regularly (see ~/.config/mise/config.toml)

jdx puts a lot of thought into it as shown here: Supply chain security with mise and asdf plugins · jdx/mise · Discussion #4054

Hetzner DNS API#

Export Token

export HETZNER_DNS_TOKEN=

List zones:

curl -fSsL "https://dns.hetzner.com/api/v1/zones" -H "Auth-API-Token: $HETZNER_DNS_TOKEN" | jq -r '.zones | .[] | .id + " " + .name' | sort

or use felix-hetzner-dns-zones

List Records:

curl -fSsL "https://dns.hetzner.com/api/v1/records" -H "Auth-API-Token: $HETZNER_DNS_TOKEN" | jq -r '.records | .[] | .zone_id + " " + .type + " " + .name + " " +.id' | sort

or use felix-hetzner-dns-records