So I was getting a baffling “unexpected remote arg” error from rsync today. Eventually I figured out the problem was that my argument “–executability” had become “– executablility”, I think due to a copy and paste problem where I copied some shell script code from Vim in a Konsole terminal into another Vim in another Konsole terminal. Traps for young players! If you get baffled by this error try putting an ‘echo’ in front of the command and then resize your terminal window to see if that affects things…
Monthly Archives: May 2017
Enabling TRIM in Debian fstab for ext4 file-system on Samsung SSD 960 EVO NVMe M.2
So I was trying to find why in my Debian 9 system my SATA drives are called SCSI devices, and I was reading Why my SATA drive is identified as a SCSI device in Device Manager where I read:
The Intel Rapid Storage driver version 12.6 (Released in March 2013) and newer versions classify all drives as SCSI devices for uniformity. This (and later) versions of the driver also allow for TRIM support (Allows for management of data blocks no longer in use) in SSD drives in RAID 0 arrays and other flexibility in operation of storage devices.
So I’d never heard of “TRIM” so I searched for that and found the Wikipedia Trim (computing) article, but Why SSD TRIM Support is So Important and How to Enable It caught my eye, because, “important” you say?
So that article about the importance of TRIM was for Windows, so I searched again and found How to properly activate TRIM for your SSD on Linux: fstrim, lvm and dm-crypt which suggested things were a bit complicated for LVM (and MD RAID?).
I ended up reading How to set up SSD raid and TRIM support? which sent me to Re: Best way (only?) to setup SSD’s for using TRIM which argued that perhaps TRIM configuration wasn’t necessary at all.
It was then I realised that I probably don’t care about TRIM on my MD RAID SSD drives, but I probably do on my M.2 SSD, which isn’t using MD RAID, but which gets massive tgz files written to it and deleted from it every day. So some more searching and I found Samsung SSD 960 EVO NVMe M.2 Review: Ultra Fast, Affordable Storage which said TRIM was supported:
Supporting features: TRIM (Required OS support), Garbage Collection, S.M.A.R.T
So then I found Enable TRIM On SSD (Solid-State Drives) In Ubuntu For Better Performance which showed me how to enable TRIM in /etc/fstab. So the relevant fstab line was:
# /data/fast was on /dev/nvme0n1p1 during configuration UUID=87bcc5fa-9261-404b-8bc7-a214f4651b49 /data/fast ext4 noatime,discard 0 2
Note the ‘discard’ option, that’s where the magic happens.
So I unmounted and remounted the partition,
root@tact:/home/jj5# umount /data/fast root@tact:/home/jj5# mount /data/fast
And dmesg indicated the discard option had been applied:
[34783.251592] EXT4-fs (nvme0n1p1): mounted filesystem with ordered data mode. Opts: discard
Now I guess we wait and see if my performance issues improve…
Automatically sync all folders in Thunderbird
So I found this:
Edit -> Preferences -> Advanced -> Config Editor…
mail.server.default.check_all_folders_for_new = true
Binding WinKey+R to Search and Launch in KDE
So I’m still used to pressing WinKey+R (AKA Meta+R) to bring up a command prompt. I added the Search and Launch widget to my default panel in KDE Plasma, then right-clicked on it and selected “Search Settings…”. From there I could bind an appropriate keyboard shortcut.
Configuring Akonadi for Thunderbird Maildir access
Then I installed the Akonadi console:
root@tact:/home/jj5# apt-get install akonadiconsole
I opened it from K -> Applications -> Development -> Akonadi Management and Debugging Console.
Then in it I selected Agents -> Local Folders.
Then I changed: /home/jj5/.local/share/akonadi_maildir_resource_0 to my ‘important’ Thunderbird ImapMail directory.
Thunderbird Maildir backend
I’m trying to figure out how to get my Thunderbird to use Maildir instead of Mbox so my backups are less data intensive.
I opened about:config via Edit -> Preferences -> Advanced -> Config Editor…
Then I changed “mail.serverDefaultStoreContractID” from “@mozilla.org/msgstore/berkeleystore;1” to “@mozilla.org/msgstore/maildirstore;1”.
Everything is easy when you know how!
Error in rsync protocol data stream
So I was running a backup with rsync and I saw this:
lib/mysql/ibdata1 437.40M 33% 4.53MB/s 0:03:10 inflate returned -3 (0 bytes) rsync error: error in rsync protocol data stream (code 12) at token.c(557) [receiver=3.1.2] rsync: connection unexpectedly closed (155602 bytes received so far) [generator] rsync error: error in rsync protocol data stream (code 12) at io.c(235) [generator=3.1.2]
The issue seems to be that if you’re using rsync compression and the remote file gets changed while the rsync copy is in progress then shit gets corrupted. My solution was to handle error level ’12’ and retry without compression. If the file changes while the rsync is in progress the file will be corrupt, so you shouldn’t rely on the integrity of such files.
Unmount all cifs mounts
I had an issue today with ‘df’ and ‘umount’ hanging because of a problem with my Windows (SMB/Samba/CIFS) share. To force unmount I used:
umount -a -t cifs -l
The above command forces all CIFS mounts to unmount immediately.
Airgap file-system
So I needed to create a file-system to house a handful of archive/backup tarballs (around 40 of them). I created an ext4 file-system with 100 inodes, like this:
# mkfs.ext4 -b 4096 -L airgap -m 0 -N 100 -v /dev/sdc1
Note: 100 inodes isn’t very many! Only supports up to 100 files/folders. Also note that 0% space is reserved for root. If you’re copying the above command make sure you replace /dev/sdc1 with an appropriate partition device.
Registering a systemd Service
So today I read How To Set Up VNC Server on Debian 8 which had a section on creating and registering the requisite scripts:
/usr/local/bin/myvncserver (make sure it’s executable with +x):
#!/bin/bash PATH="$PATH:/usr/bin/" DISPLAY="1" DEPTH="16" GEOMETRY="1024x768" OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}" case "$1" in start) /usr/bin/vncserver ${OPTIONS} ;; stop) /usr/bin/vncserver -kill :${DISPLAY} ;; restart) $0 stop $0 start ;; esac exit 0
/lib/systemd/system/myvncserver.service:
[Unit] Description=VNC Server example [Service] Type=forking ExecStart=/usr/local/bin/myvncserver start ExecStop=/usr/local/bin/myvncserver stop ExecReload=/usr/local/bin/myvncserver restart User=vnc [Install] WantedBy=multi-user.target
Then to register and start:
systemctl daemon-reload systemctl enable myvncserver.service systemctl start myvncserver.service