mgutt Posted October 30, 2022 Share Posted October 30, 2022 I prefer creating backups of my PCs without installing additional software, so I came up with this solution: Step 1 Add a new local user "backup" to all of your PCs (How-To: Windows, Mac) Step 2 On those PCs, share all folders which should be part of your backup (How-To: Windows, Mac) and add the user "backup" with "read-only" (important against Ransomware). Note for windows: Sharing C:\users\<username> is possible, but if you share only specific folders - like Pictures, Documents or Desktop - the backup will be done much faster. Step 3 Change the settings in the following script and execute it by the user scripts plugin every X hours: #!/bin/bash # settings smb_user="backup" smb_pass="<password>" mount_path="/mnt/remotes" backup_cmd="/usr/local/bin/incbackup" backup_dst_path="/mnt/user/Backups" backup_computernames="(^desktop-|-pc$|-laptop$|-notebook$)" # check if NetBIOS daemon is enabled (is required to use nmblookup) if [[ ! -f /var/run/nmbd.pid ]]; then echo "Error: NetBIOS must be enabled in the SMB Settings" exit 1 fi # obtain workgroup workgroup=$(testparm -sl --parameter-name=workgroup 2>/dev/null) # loop through all members of workgroup while IFS= read -r hostname; do echo "Found host $hostname" # find PC by name if ! echo "$hostname" | grep -qiP "$backup_computernames"; then echo "$hostname is not a PC (skip)" continue fi # online check if ping -c1 -W1 "$hostname" >/dev/null 2>/dev/null; then echo "online" # check smb port if timeout 1 bash -c "</dev/tcp/$hostname/445" 2>/dev/null; then echo "smb port open" # obtain shares while IFS= read -r share; do echo "found share $share" # check auth if smbclient "//$hostname/$share" -U "$smb_user%$smb_pass" -d0 -c ls >/dev/null; then # mount share [[ -d "$mount_path/$hostname/$share" ]] && mkdir -vp "$mount_path/$hostname/$share" echo "mount share" if ! mount -t cifs -o username=$smb_user,password=$smb_pass,iocharset=utf8 "//$hostname/$share" "$mount_path/$hostname/$share"; then echo "Error: Could not mount //$hostname at $mount_path/$hostname!" continue fi echo "Successfully mounted //$hostname/$share at $mount_path/$hostname/$share" # create backup [[ -d "$backup_dst_path/$hostname/$share" ]] && mkdir -vp "$backup_dst_path/$hostname/$share" $backup_cmd "$mount_path/$hostname/$share/" "$backup_dst_path/$hostname/$share" # unmount share umount -l "$mount_path/$hostname/$share" echo "Unmounted $mount_path/$hostname/$share" else echo "Error: Insufficient permissions to access //$hostname/$share" fi done < <(smbclient -L "//$hostname" -U "$smb_user%$smb_pass" -d0 -g | grep -oP '(?<=\|)[^|]+(?=\|)' | grep -v '\$$') else echo "smb port closed" fi else echo "offline" fi done < <(nmblookup -S "$workgroup" | grep -oP '[^ \t]+(?=.*<20>)') How does it work - obtains current workgroup (NetBIOS must be enabled in SMB settings!) - searches for all PCs that are part of this workgroup - checks if those PCs are online - checks if the SMB port is open - tries to login with the user "backup" - mounts those PC shares as local Unraid paths - executes backup command - unmounts PC shares It does not identify your PC? Consider changing the PC name or the following setting in the script: backup_computernames="(^desktop-|-pc$|-laptop$|-notebook$)" It means that the computer name: - starts with "DESKTOP-" or - ends with "-PC"or "-LAPTOP" or "-NOTEBOOK" For example Windows automatically names new PCs in the format "DESKTOP-<random_id>", but I prefer renaming my computers to "JOHN-PC". Note: I didn't tested it with Mac, but I would wonder if it wouldn't work there, too. Example-Backup This is how it looks on my server: As you can see, the folder is named "MARC-PC", which is the name of my PC. Of course it depends on your used backup command how backups are created. Note: The Unraid share "Backups" shouldn't be available through the network (this respect the pc owners privacy and protects it against ransomware!). 1 Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.