There’s plenty of
information and posts available in the Unifi forums that explains how
to replace the default 1TB hard drive with one of larger capacity,
but there seems to be another issue that’s being overlooked.
Data retention and
backups are critical in a corporate environment, and an issue that
several people observed was that the scheduled backups on a Unifi
Cloudkey Gen2 Plus only include the system configuration, and do NOT
include the proprietary video archive files.
The Unifi
Cloudkey Gen2 Plus is essentially a mini Linux computer. I
noticed there was a spare USB Type C port on the back of the device
that the vendor states is “reserved for future use”, as shown
below on the right.
I’ve tested several external drives on this port using a small
converter I bought on Amazon, and while I ran into some issues
with the popular small form factor drives that are powered by the USB
port itself, I ended up finding a GREAT solution that involves using
an externally powered full size 6TB USB external HDD by Western
Digital.
Using the steps
below, you can mirror your video footage from it’s default location
to an external drive.
Note: There are 3
ways to power
a Cloudkey Gen2 Plus. This method works best when using PoE
Switch port or a PoE injector.
Required
Hardware
-
Ubiquiti
Cloudkey Gen2 Plus
-
WD
6TB Elements External Hard Drive (or a similar one, as long as
it has its own power supply)
-
USB-C
to USB Adapter (this model is tested and confirmed to work)
Initial
USB
Drive Install and Detection
-
Plug the USBC
to USB adapter into the spare USB-C port on the back of the Cloudkey
(see diagram above).
-
Plug the
power cord to the new external HDD and turn on it’s power.
-
Plug the USB
cord of the HDD into the adapter you’ve installed on the Cloudkey.
-
SSH into your
Cloudkey and run `lsusb`. The output show show the new drive.
root@UCK-G2-Plus:~#
lsusb
Bus
002 Device 005: ID 1058:25a3 Western Digital Technologies, Inc.
Elements Desktop (WDBWLG)
Bus
002 Device 003: ID 174c:1153 ASMedia Technology Inc. ASM1153 SATA
3Gb/s bridge
Bus
002 Device 004: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit
Ethernet
Bus
002 Device 002: ID 0451:8440 Texas Instruments, Inc.
Bus
002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus
001 Device 005: ID 0451:82ff Texas Instruments, Inc.
Bus
001 Device 002: ID 0451:8442 Texas Instruments, Inc.
Bus
001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Configure
the new USB Drive
-
The command
`fdisk -l` should show you the new drive location. In
my case, it was /dev/sdb. Pay close attention to the output and be
sure you are identifying the new disk correctly!
root@UCK-G2-Plus:~#
fdisk -l | grep Disk ←
This
command only displays the disk information.
Disk
/dev/mtdblock0: 64 KiB, 65536 bytes, 128 sectors
Disk
/dev/mmcblk0: 29.1 GiB, 31268536320 bytes, 61071360 sectors
Disklabel
type: gpt
Disk
identifier: 98101B32-BBE2-4BF2-A06E-2BB33D000C20
Disk
/dev/mmcblk1: 1.9 GiB, 2002780160 bytes, 3911680 sectors
Disklabel
type: gpt
Disk
identifier: 853D3873-C240-465B-BAAB-71BADB716C09
Disk
/dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disklabel
type: gpt
Disk
identifier: 95FA9511-D663-4144-BA52-885FBA96352F
Disk
/dev/sdb: 5.5 TiB, 6001140957184 bytes, 11720978432 sectors
Disklabel
type: gpt
Disk
identifier: B0A5E08B-AA2D-42CD-AEDB-92220EE744A7
-
Next, you’ll
need to clear the partition table on the disk (since most new drives
come with a DOS partition by default) and create a new Linux EXT4
partition.
root@UCK-G2-Plus:~#
fdisk /dev/sdb ←
Make
sure you type the correct disk here!
Welcome
to fdisk (util-linux 2.29.2).
Changes
will remain in memory only, until you decide to write them.
Be
careful before using the write command.
Command
(m for help): d ←Type
“d”
to
delete the factory defined partition.
Selected
partition 1
Partition
1 has been deleted.
Command
(m for help): w ←
Type
“w” to write the table to disk.
The
partition table has been altered.
Calling
ioctl() to re-read partition table.
Syncing
disks.
-
Now
you can create a new Linux EXT4 filesystem.
root@UCK-G2-Plus:~#
fdisk /dev/sdb ←
Make
sure you type the correct disk here!
Welcome
to fdisk (util-linux 2.29.2).
Changes
will remain in memory only, until you decide to write them.
Be
careful before using the write command.
Command
(m for help): n
←Type
“n” for new partition.
Partition
type
p
primary (0 primary, 0 extended, 4 free)
e
extended (container for logical partitions)
Select
(default p): p ←Type
“p” for primary.
Partition
number (1-4, default 1):
First
sector (2048-1953525167, default 2048):
Last
sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default
1953525167):
Created
a new partition 1 of type 'Linux' and of size 931.5 GiB.
Command
(m for help): w
←
Type
“w” to write the table to disk. This will create /dev/sdb1.
The
partition table has been altered.
Calling
ioctl() to re-read partition table.
Syncing
disks.
-
Lastly,
format the new /dev/sdb1 partition type as Linux EXT4:
root@UCK-G2-Plus:~#
mkfs.ext4
/dev/sdb1 ←
Make
sure you type the correct partition here!
mke2fs
1.42.13 (17-May-2015)
/dev/sdb1
contains a file system
Proceed
anyway? (y,n) y ←
Type
“y”
to
proceed
Creating
filesystem with 244190390 4k blocks and 61054976 inodes
Filesystem
UUID: 4b892979-ccef-4353-ba05-2a70b0d25cf4
Superblock
backups stored on blocks:
32768,
98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000,
7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000,
214990848
Allocating
group tables: done
Writing
inode tables: done
Creating
journal (32768 blocks): done
Writing
superblocks and filesystem accounting information: done
Mount
the new USB Drive
-
Create
a mount point and mount the new drive.
root@UCK-G2-Plus:~#
mkdir
/mnt/backup ←
Create
a mount point.
root@UCK-G2-Plus:~# mount
/dev/sdb1 /mnt/backup ←
Mount
the new partition.
root@UCK-G2-Plus:~# df
-h ←
View
all mounted drives.
Filesystem Size Used Avail
Use% Mounted on
udev 1.5G 0 1.5G 0% /dev
tmpfs 299M 5.0M 294M 2%
/run
/dev/mmcblk0p46 5.9G 516M
5.3G 9% /mnt/.rwfs
/dev/disk/by-partlabel/rootfs
363M 363M 0 100% /mnt/.rofs
overlayfs-root 5.9G 516M
5.3G 9% /
tmpfs 1.5G 4.0K 1.5G 1%
/dev/shm
tmpfs 5.0M 0 5.0M 0%
/run/lock
tmpfs 1.5G 0 1.5G 0%
/sys/fs/cgroup
tmpfs 746M 132K 746M 1%
/tmp
/dev/mmcblk0p45 976M 142M
809M 15% /persist
/dev/mmcblk0p47 19G 45M
19G 1% /srv-internal
/dev/sda4 878G 5.7G 872G
1% /srv
/dev/sda2 16G 156M 16G 1%
/srv/var
/dev/sda3 32G 123M 32G 1%
/srv/db
/dev/mmcblk1p1 1.9G 7.8M
1.8G 1% /data
tmpfs 256M 2.9M 254M 2%
/srv/unifi-protect/temp
/dev/sdb1
5.5T 1.7T 3.5T 34% /mnt/backup ←
There
it is!
-
Mount
the new USB drive upon reboot (2 methods are shown below).
root@UCK-G2-Plus:~#
vi
/etc/rc3.d/S01unifi ←
add
“ mount /dev/sdb1 /mnt/backup”
save
the file by typing “:wq!”
OR, if you are not comfortable
with the vi editor, this command will do the same thing:
root@UCK-G2-Plus:/etc/rc3.d#
echo "mount /dev/sdb1 /mnt/backup"
| cat - /etc/rc3.d/S01unifi > temp && mv temp
/etc/rc3.d/S01unifi
Synchronize
the default video location with a folder on the new USB drive
root@UCK-G2-Plus:~#
apt install rsync
root@UCK-G2-Plus:~#
mkdir /mnt/backup/video
root@UCK-G2-Plus:~#
rsync -aP /srv/unifi-protect/video/
/mnt/backup/video/
sending
incremental file list
./
2020/
2020/07/
2020/07/12/
2020/07/12/FCECDAD88B53_0_rotating_1594587207715.ubv
1,073,741,824
100% 73.21MB/s 0:00:13 (xfr#1, to-chk=4/11)
2020/07/12/FCECDAD88B53_0_timelapse_1594587847873.ubv
1,073,741,824
100% 73.07MB/s 0:00:14 (xfr#2, to-chk=3/11)
2020/07/12/FCECDAD88B53_2_rotating_1594587207671.ubv
1,073,741,824
100% 74.73MB/s 0:00:13 (xfr#3, to-chk=2/11)
2020/07/12/FCECDAD88B53_2_timelapse_1594589641979.ubv
1,073,741,824
100% 69.41MB/s 0:00:14 (xfr#4, to-chk=1/11)
2020/07/26/
2020/07/26/FCECDAD88B53_0_rotating_1595775383126.ubv
1,073,741,824
100% 67.99MB/s 0:00:15 (xfr#5, to-chk=0/11)
pool/
Configure
a scheduled task to mirror your videos each day
Use the cron
scheduler service to create your daily backups using the rsync
command above.
root@UCK-G2-Plus:~#
crontab
-e ←
This
basically opens a vi editor where you can add the rsync command and
timing variables using the vi command set.