Rescuing storage
Tweaks and maintenance updates to Practicalli projects and my Neovim config this week.
Continuing to organise my digital media which required recovery of a RAID array, using SSH to connect to the NAS and the mdadm
tool to repair the RAID array.
I forgot how crap Apple software can be when I tried to watch movies stored on my iPad via the Apple TV box connected to my TV. There is an AirPlay option in VLC and it picks up the AppleTV, however, it will only stream the audio and not the video. In the settings drop-down from the top-right (which has network, bluetooth, volume, etc.) has a screen mirror button that does actually stream both audio and video. They both seem to be using AirPlay, but selecting from VLC never seems to work, which is unfortunate as this is the most convenient button to select from within VLC.
I wasn't feeling optimistic about my health at the start of the week, but I managed a lot of walking, a 35km hilly cycle ride and a park run 5km in 38 mins. So my health is slowly getting a little better.
I do have greater pain in my throat and ears after the exercise, so am taking more paracetamol to help combat the inflammation there.
Practicalliλ︎
Updated the library dependencies across Practicalli projects shared via GitHub (and archived on GitLab for redundancy)
- Practicalli Clojure CLI Config update using (
make oudated
) - Practicalli Project Templates update using (
make oudated
)
Practicall GitLab archive
Practicalli Group on GitLab contains an import of the most important repositories from the Practicalli GitHub Org. Imported repositories can be re-imported from GitHub to update with changes on GitLab, using the New button, selecting Import and then select the GitHub repositories to import or re-import.
These do not seem to act like a forked repository on GitHub so a specific GitLab repository does not have the ability to import or update changes directly.
Changing the name of the GitHub repository seems to require the original import to GitLab to be deleted and imported using the new GitHub name.
Spaceλ︎
The morning of Sunday 2nd March was the successful launch of Firefly Blue Ghose Mission 1 Luna landing
NAS recoveryλ︎
Login to the QNap via SSH
Qnap Shell does not support Kitty
kitty +kitten ssh
command connects initially but when trying to copy over the kitty config the Qnap shell doesn't like it and closes the connection.
The Qnap has standard Linux device names for RAID, e.g. md0
, md1
, md2
, etc.
See the status of the first RAID drive, md0
Example output
/dev/md0:
Version : 01.00.03
Creation Time : Sat Jan 23 19:04:18 2021
Raid Level : raid6
Array Size : 17572185216 (16758.14 GiB 17993.92 GB)
Used Dev Size : 2928697536 (2793.02 GiB 2998.99 GB)
Raid Devices : 8
Total Devices : 7
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Thu Feb 27 15:43:38 2025
State : clean, degraded
Active Devices : 7
Working Devices : 7
Failed Devices : 0
Spare Devices : 0
Chunk Size : 64K
Name : 0
UUID : cf1b4f4e:6d83f848:0afc40fb:20a69932
Events : 8545
Number Major Minor RaidDevice State
0 8 3 0 active sync /dev/sda3
1 0 0 1 removed
2 8 35 2 active sync /dev/sdc3
3 8 51 3 active sync /dev/sdd3
4 8 67 4 active sync /dev/sde3
8 8 83 5 active sync /dev/sdf3
6 8 99 6 active sync /dev/sdg3
7 8 115 7 active sync /dev/sdh3
The State
shows the RAID is clean but degraded, so it needs to be synchronised (sync'd).
The raid does not show as mounted (in the admin console or the command line)
Output
Filesystem Size Used Available Use% Mounted on
/dev/ramdisk 151.1M 134.9M 16.2M 89% /
tmpfs 64.0M 196.0k 63.8M 0% /tmp
tmpfs 494.4M 0 494.4M 0% /dev/shm
tmpfs 16.0M 0 16.0M 0% /share
/dev/sda4 371.0M 281.5M 89.5M 76% /mnt/ext
/dev/md9 509.5M 135.6M 373.9M 27% /mnt/HDA_ROOT
tmpfs 64.0M 1.9M 62.1M 3% /samba
Suggested manual commands to get the RAID mounted
[~] # e2fsck_64 -fp -C 0 /dev/md0
/dev/md0 is in use.
e2fsck: Cannot continue, aborting.
[~] # mount -t ext4 /dev/md0 /share/MD0_DATA
mount: /dev/md0 already mounted or /share/MD0_DATA busy
View the RAID status to see if any are being rebuilt or sync'ing
[~] # cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md0 : active raid6 sda3[0] sdh3[7] sdg3[6] sdf3[8] sde3[4] sdd3[3] sdc3[2]
17572185216 blocks super 1.0 level 6, 64k chunk, algorithm 2 [8/7] [U_UUUUUU]
md8 : active raid1 sdh2[8](S) sdg2[7](S) sdf2[6](S) sde2[5](S) sdd2[4](S) sdc2[3](S) sdb2[2] sda2[0]
530128 blocks super 1.0 [2/2] [UU]
md13 : active raid1 sdb4[0] sdh4[1] sda4[7] sdc4[6] sdd4[5] sde4[4] sdf4[3] sdg4[2]
458880 blocks [8/8] [UUUUUUUU]
bitmap: 0/57 pages [0KB], 4KB chunk
md9 : active raid1 sdb1[1] sda1[0] sdh1[7] sdg1[6] sdc1[5] sdd1[4] sde1[3] sdf1[2]
530048 blocks [8/8] [UUUUUUUU]
bitmap: 0/65 pages [0KB], 4KB chunk
unused devices: <none>
checking other raid devices
[~] # mdadm --detail /dev/md8
/dev/md8:
Version : 01.00.03
Creation Time : Thu Feb 27 15:52:08 2025
Raid Level : raid1
Array Size : 530128 (517.79 MiB 542.85 MB)
Used Dev Size : 530128 (517.79 MiB 542.85 MB)
Raid Devices : 2
Total Devices : 8
Preferred Minor : 8
Persistence : Superblock is persistent
Update Time : Thu Feb 27 15:52:42 2025
State : clean
Active Devices : 2
Working Devices : 8
Failed Devices : 0
Spare Devices : 6
Name : 8
UUID : 69fc4e35:3d9ec1d4:e70c4bbe:388c4932
Events : 30
Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
2 8 18 1 active sync /dev/sdb2
3 8 34 - spare /dev/sdc2
4 8 50 - spare /dev/sdd2
5 8 66 - spare /dev/sde2
6 8 82 - spare /dev/sdf2
7 8 98 - spare /dev/sdg2
8 8 114 - spare /dev/sdh2
[~] # mdadm --detail /dev/md13
mdadm: cannot open /dev/md13: No such file or directory
[~] # mdadm --detail /dev/md9
/dev/md9:
Version : 00.90.03
Creation Time : Fri May 4 23:09:53 2012
Raid Level : raid1
Array Size : 530048 (517.71 MiB 542.77 MB)
Used Dev Size : 530048 (517.71 MiB 542.77 MB)
Raid Devices : 8
Total Devices : 8
Preferred Minor : 9
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Thu Feb 27 16:30:59 2025
State : active
Active Devices : 8
Working Devices : 8
Failed Devices : 0
Spare Devices : 0
UUID : 38d99002:2db9d678:271fd220:f1e2bd9c
Events : 0.13010
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
2 8 81 2 active sync /dev/sdf1
3 8 65 3 active sync /dev/sde1
4 8 49 4 active sync /dev/sdd1
5 8 33 5 active sync /dev/sdc1
6 8 97 6 active sync /dev/sdg1
7 8 113 7 active sync /dev/sdh1
My Healthλ︎
A sunny (but cold) Friday motivated me for a cycle ride. I was going to do a local lap (10km) but was feeling good so cycled down to Otford and back up again (35km). Not the fastest time (and didn't expect it), but averaged an almost respectable 21 km/hour average speed.
I was tired after the ride on Saturday but managed a 5km park run around Normand Park in Bromley. As usual there was a very big group (and a relatively narrow path) but I managed to jog for the first couple of minutes, occasionally on the slightly muddy grass so I wasn't boxed in by all the other runners.
Most of the park run was a speed walking rather than jogging, but there are some slight downhill parts where I pushed myself to run. I was keeping up with the 38 minute pace runner and overtook them during the last 50 meter dash. So I was a bit disappointed that my park run time was 38 minutes and 29 seconds.
The park run was about a minute and a half faster than last time, so at least it was some improvement. My legs weren't turning to jelly as much at the end compared to last time. I will be happy when I can get under 37 minutes before the end of March. I would love to beat my personal best of 30 minutes by the end of April (but that may be pushing it).
I walked more than 5km each day except for Monday this week. My leg muscles really benefit from the stretch they get when walking, helping avoid my legs seizing up after park run and cycling activities.
Thank you.
Practical.li Website
Practical.li GitHub Org
practicalli-johnny profile
@practicalli@clj.social
@practical_li