Turritopsis Dohrnii Teo En Ming
2026-Jan-29 12:00 UTC
Finally managed to get rsync script working after working on it for more than 7 hours since 1.30 AM on 28 Jan 2026 Wednesday
Subject: Finally managed to get rsync script working after working on it for
more than 7 hours since 1.30 AM on 28 Jan 2026 Wednesday
Good day from Singapore,
I have finally managed to get rsync script working after working on it for more
than 7 hours since 1.30 AM on 28 Jan 2026 Wednesday.
The old Synology DS713+ NAS was backed up to USB external harddisk using Hyper
Backup.
The Hyper Backup on the USB external harddisk was fully restored on the new
Synology DS1522+ NAS at 1.30 AM on 28 Jan 2026 Wednesday.
Since 1.30 AM in the morning, I have been working for more than 7 hours to get
the rsync script working, all throughout the night.
rsync daemon keeps failing with errors, so I had no choice but to turn to rsync
SSH.
Before running rsync SSH, I need to get passwordless SSH login working first.
1?? Generate an SSH key on DS713+ (client)
ssh-keygen -t rsa -b 4096
Press Enter to accept the default path:
/var/services/homes/rsyncuser/.ssh/id_rsa
Press Enter again for no passphrase (needed for automation)
This creates:
/var/services/homes/rsyncuser/.ssh/id_rsa ? private key (keep secret!)
/var/services/homes/rsyncuser/.ssh/id_rsa.pub ? public key
2?? Copy the public key to DS1522+ (server) manually
SSH into DS1522+ as rsyncuser
mkdir -p ~/.ssh
chmod 700 ~/.ssh
On DS713+, print your public key:
cat /var/services/homes/rsyncuser/.ssh/id_rsa.pub
---public key snipped---
On DS1522+, append it to authorized_keys:
vi ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
3?? Test passwordless login
ssh rsyncuser at 192.168.0.101
The authenticity of host '192.168.0.101 (192.168.0.101)' can't be
established.
ECDSA key fingerprint is ---snipped---
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.101' (ECDSA) to the list of known
hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/var/services/homes/rsyncuser/.ssh/id_rsa' are too
open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/var/services/homes/rsyncuser/.ssh/id_rsa": bad permissions
rsyncuser at 192.168.0.101's password:
On DS713+:
chmod 700 /var/services/homes/rsyncuser/.ssh
chmod 600 /var/services/homes/rsyncuser/.ssh/id_rsa
chmod 644 /var/services/homes/rsyncuser/.ssh/id_rsa.pub
Passwordless ssh login is now successful.
Test rsync for 1 shared folder
1st test:
nohup rsync -aHAX --numeric-ids \
--partial --info=progress2,stats2,name \
--outbuf=L \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/1 Sales/" \
"rsyncuser at 192.168.0.101:/volume1/1 Sales/" \
>> /volume1/rsync_1_Sales.log 2>&1 &
2nd test:
nohup rsync -aHAX --numeric-ids \
--partial --progress --verbose \
--outbuf=L \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/1 Sales/" \
"rsyncuser at 192.168.0.101:/volume1/1 Sales/" \
>> /volume1/rsync_1_Sales.log 2>&1 &
No output for above rsync runs.
Test rsync for small folder "web"
rsync -av --progress \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/web/" \
"rsyncuser at 192.168.0.101:/volume1/web/"
Result:
sending incremental file list
rsync: opendir "/volume1/web/web_images" failed: Permission denied
(13)
./
@eaDir/
@eaDir/@tmp/
sent 356 bytes received 29 bytes 256.67 bytes/sec
total size is 2,310 speedup is 6.00
rsync error: some files/attrs were not transferred (see previous errors) (code
23) at main.c(1462) [sender=3.1.2]
Test rsync again with exclude eaDir
rsync -av --progress \
--exclude='@eaDir/' \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/web/" \
"rsyncuser at 192.168.0.101:/volume1/web/"
Result:
sending incremental file list
rsync: opendir "/volume1/web/web_images" failed: Permission denied
(13)
sent 275 bytes received 14 bytes 192.67 bytes/sec
total size is 2,310 speedup is 7.99
rsync error: some files/attrs were not transferred (see previous errors) (code
23) at main.c(1462) [sender=3.1.2]
? CORRECT FIX (safe, Synology-approved)
You need to re-apply and enforce ACL inheritance on the source NAS (DS713+).
sudo synoacltool -add /volume1/web rsyncuser:allow:rwx
Result:
(synoacltool.c, 253)Unknown error
sudo synoacltool -enforce-inherit /volume1/web
rsyncuser at DiskStation:~/.ssh$ sudo -u rsyncuser ls /volume1/web/web_images
ls: cannot open directory '/volume1/web/web_images': Permission denied
? Working approach: run rsync as root via SSH
Since your goal is migration to DS1522+, the easiest solution that actually
works on DS713+ is:
Use root on DS713+ as the source
Use SSH rsync with passwordless keys for root
Exclude @eaDir
This avoids all ACL problems because root can read every folder, including
legacy ACL-protected subfolders.
On DS713+:
sudo -i
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
---snipped---
The key's randomart image is:
+---[RSA 3072]----+
---snipped---
+----[SHA256]-----+
cat /root/.ssh/id_rsa.pub
---public key snipped---
On DS1522+:
echo "---public key snipped---" >>
/var/services/homes/rsyncuser/.ssh/authorized_keys
chmod 600 /var/services/homes/rsyncuser/.ssh/authorized_keys
chown -R rsyncuser:users /var/services/homes/rsyncuser/.ssh
Now root on DS713+ ? rsyncuser on DS1522+ is passwordless.
Test rsync again.
rsync -aAX --numeric-ids --partial \
--exclude='@eaDir/' \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/web/" \
"rsyncuser at 192.168.0.101:/volume1/web/" \
>> /volume1/rsync_web.log
rsync: failed to modify permissions on "/volume1/web/intranet":
Operation not permitted (1)
rsync: rsync_xal_set:
set_xattr_syno_acl(""/volume1/web/."","user.rsync.synoacl")
failed: Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code
23) at main.c(1462) [sender=3.1.2]
Test rsync again:
rsync -a --numeric-ids --partial \
--exclude='@eaDir/' \
--no-acls --no-xattrs \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/web/" \
"rsyncuser at 192.168.0.101:/volume1/web/" \
>> /volume1/rsync_web.log
rsync: failed to set permissions on "/volume1/web/.htaccess":
Operation not permitted (1)
rsync: failed to set permissions on "/volume1/web/index.html":
Operation not permitted (1)
rsync: failed to set permissions on "/volume1/web/intranet": Operation
not permitted (1)
rsync: failed to modify permissions on "/volume1/web/intranet":
Operation not permitted (1)
rsync: failed to set permissions on
"/volume1/web/intranet/***_index.php": Operation not permitted (1)
rsync: failed to set permissions on "/volume1/web/intranet/index.php":
Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code
23) at main.c(1462) [sender=3.1.2]
Test rsync again:
rsync -av --numeric-ids --partial \
--exclude='@eaDir/' \
--chmod=ugo=rwX \
--no-acls --no-xattrs \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/web/" \
"rsyncuser at 192.168.0.101:/volume1/web/" \
>> /volume1/rsync_web.log
rsync: failed to set permissions on "/volume1/web/.htaccess":
Operation not permitted (1)
rsync: failed to set permissions on
"/volume1/web/intranet/***_index.php": Operation not permitted (1)
rsync: failed to set permissions on "/volume1/web/intranet/index.php":
Operation not permitted (1)
rsync: failed to set permissions on "/volume1/web/web_images":
Operation not permitted (1)
rsync: failed to set permissions on "/volume1/web/web_images/bg.png":
Operation not permitted (1)
rsync: failed to set permissions on
"/volume1/web/web_images/icon.png": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code
23) at main.c(1462) [sender=3.1.2]
Test rsync again:
rsync -rltDv --progress \
--exclude='@eaDir/' \
--no-perms --no-owner --no-group --no-acls --no-xattrs \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/web/" \
"rsyncuser at 192.168.0.101:/volume1/web/" \
>> /volume1/rsync_web.log
Output:
sending incremental file list
sent 280 bytes received 14 bytes 196.00 bytes/sec
total size is 233,274 speedup is 793.45
New rsync script:
vi rsync_script.sh
#!/bin/bash
# DS713+ -> DS1522+ migration via rsync over SSH
# All shared folders in a loop, passwordless SSH, background-safe
# Target NAS and user
TARGET_USER="rsyncuser"
TARGET_HOST="192.168.0.101"
# Shared folders to migrate
FOLDERS=(
"1 Sales"
"2 OPERATIONS"
"3 Admin"
"4 ISO 9001"
"5 Finance"
"6 IT"
"7 Volume_1"
"8"
"8 SynologyLog"
"Completed Projects"
"Disk 2"
"docker"
"OSV and LLP"
"Volume_2"
"web"
"web_packages"
)
# Base log folder on source NAS
LOGDIR="/volume1/rsync_logs"
mkdir -p "$LOGDIR"
# Loop over folders
for F in "${FOLDERS[@]}"; do
# Escape spaces in folder name for rsync destination
DEST_FOLDER="$F"
echo "Starting rsync for folder: $F"
nohup rsync -rltDv --progress \
--exclude='@eaDir/' \
--no-perms --no-owner --no-group --no-acls --no-xattrs \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/$F/" \
"$TARGET_USER@$TARGET_HOST:/volume1/$DEST_FOLDER/" \
>> "$LOGDIR/rsync_$(echo $F | tr ' '
'_').log" 2>&1 &
done
echo "All rsync jobs started in background. Logs are in $LOGDIR"
End of script.
chmod +x rsync_script.sh
/root/rsync_script.sh
Output:
root at DiskStation:/volume1/rsync_logs# tail -f rsync_1_Sales.log
kex_exchange_identification: Connection closed by remote host
rsync error: unexplained error (code 255) at io.c(254) [sender=3.1.2]
Test another script:
#!/bin/bash
# Sequential background rsync for Synology migration
# Source: DS713+, Target: DS1522+ (rsyncuser)
# One folder at a time to avoid SSH session limits
TARGET_USER="rsyncuser"
TARGET_HOST="192.168.0.101"
FOLDERS=(
"1 Sales"
"2 OPERATIONS"
"3 Admin"
"4 ISO 9001"
"5 Finance"
"6 IT"
"7 Volume_1"
"8"
"8 SynologyLog"
"Completed Projects"
"Disk 2"
"docker"
"OSV and LLP"
"Volume_2"
"web"
"web_packages"
)
LOGDIR="/volume1/rsync_logs"
mkdir -p "$LOGDIR"
for F in "${FOLDERS[@]}"; do
LOGFILE="$LOGDIR/rsync_$(echo $F | tr ' '
'_').log"
echo "===== Starting rsync for folder: $F at $(date) ====="
>> "$LOGFILE"
# Run rsync sequentially but in background via nohup
nohup rsync -rltDv --progress \
--exclude='@eaDir/' \
--no-perms --no-owner --no-group --no-acls --no-xattrs \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/$F/" \
"$TARGET_USER@$TARGET_HOST:/volume1/$F/" \
>> "$LOGFILE" 2>&1
echo "===== Completed rsync for folder: $F at $(date) ====="
>> "$LOGFILE"
done
echo "All rsync folders queued sequentially in nohup. Logs in $LOGDIR"
End of script
nohup /root/rsync_script.sh &
Output:
===== Starting rsync for folder: 1 Sales at Wed Jan 28 12:31:35 +08 2026
====sending incremental file list
rsync: [sender] write error: Broken pipe (32)
rsync error: error in socket IO (code 10) at io.c(871) [sender=3.1.2]
===== Completed rsync for folder: 1 Sales at Wed Jan 28 12:31:37 +08 2026 ====
Testing another script:
#!/bin/bash
# DS713+ -> DS1522+ migration via SSH rsync
# Sequentially process 16 shared folders, per-folder logging
# Skip ACLs/xattrs to avoid permission errors
# Exclude @eaDir
# Target NAS and user
TARGET_USER="rsyncuser"
TARGET_HOST="192.168.0.101"
# Shared folders to migrate
FOLDERS=(
"1 Sales"
"2 OPERATIONS"
"3 Admin"
"4 ISO 9001"
"5 Finance"
"6 IT"
"7 Volume_1"
"8"
"8 SynologyLog"
"Completed Projects"
"Disk 2"
"docker"
"OSV and LLP"
"Volume_2"
"web"
"web_packages"
)
# Base log folder on source NAS
LOGDIR="/volume1/rsync_logs"
mkdir -p "$LOGDIR"
# Loop through folders sequentially
for F in "${FOLDERS[@]}"; do
LOGFILE="$LOGDIR/rsync_$(echo "$F" | tr ' '
'_').log"
echo "===== Starting rsync for folder: $F at $(date) ====="
>> "$LOGFILE"
rsync -rltDv --progress \
--exclude='@eaDir/' \
--no-perms --no-owner --no-group --no-acls --no-xattrs \
-e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \
"/volume1/$F/" \
"$TARGET_USER@$TARGET_HOST:/volume1/$F/" \
>> "$LOGFILE" 2>&1
echo "===== Completed rsync for folder: $F at $(date) ====="
>> "$LOGFILE"
done
echo "All folders have been processed sequentially. Logs are in
$LOGDIR"
nohup /root/rsync_script.sh > /volume1/rsync_master.log 2>&1 &
Output:
===== Starting rsync for folder: 1 Sales at Wed Jan 28 12:37:26 +08 2026
====sending incremental file list
rsync: [sender] write error: Broken pipe (32)
rsync error: error in socket IO (code 10) at io.c(871) [sender=3.1.2]
===== Completed rsync for folder: 1 Sales at Wed Jan 28 12:37:27 +08 2026 ====
GRAND FINAL WORKING RSYNC SCRIPT - CONFIRMED AND TESTED TO BE WORKING! - AS AT
28 JAN 2026 Wednesday 1.36 PM
=============================================================================================================
#!/bin/bash
# Bulletproof Synology migration script: DS713+ -> DS1522+
# Sequential SSH rsync for 16 shared folders
# Handles spaces, retries, logs, #recycle excluded
# ----------------------------
# Configuration
# ----------------------------
TARGET_USER="rsyncuser"
TARGET_HOST="192.168.0.101"
BW_LIMIT=3000 # KB/s, adjust as needed
MAX_RETRIES=3
LOGDIR="/volume1/rsync_logs"
mkdir -p "$LOGDIR"
# List of shared folders to migrate
FOLDERS=(
"1 Sales"
"2 OPERATIONS"
"3 Admin"
"4 ISO 9001"
"5 Finance"
"6 IT"
"7 Volume_1"
"8"
"8 SynologyLog"
"Completed Projects"
"Disk 2"
"docker"
"OSV and LLP"
"Volume_2"
"web"
"web_packages"
)
# ----------------------------
# Pre-create all destination folders on DS1522+
# ----------------------------
echo "Creating all target folders on $TARGET_HOST..."
for F in "${FOLDERS[@]}"; do
ssh "$TARGET_USER@$TARGET_HOST" "mkdir -p
'/volume1/$F'"
done
echo "All destination folders created."
# ----------------------------
# Migration loop
# ----------------------------
for F in "${FOLDERS[@]}"; do
LOGFILE="$LOGDIR/rsync_$(echo "$F" | tr ' '
'_').log"
echo "===== Starting rsync for folder: $F at $(date) ====="
>> "$LOGFILE"
RETRY_COUNT=0
SUCCESS=0
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
rsync -rltDv --progress \
--exclude='@eaDir/' \
--exclude='#recycle/' \
--no-perms --no-owner --no-group --no-acls --no-xattrs \
--bwlimit=$BW_LIMIT \
-e "ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=10 -o
TCPKeepAlive=yes" \
"/volume1/$F/" \
"$TARGET_USER@$TARGET_HOST:'/volume1/$F/'" \
>> "$LOGFILE" 2>&1
if [ $? -eq 0 ]; then
SUCCESS=1
echo "===== Completed rsync for folder: $F at $(date) SUCCESS
=====" >> "$LOGFILE"
break
else
RETRY_COUNT=$((RETRY_COUNT+1))
echo "===== rsync FAILED for folder: $F, retry
$RETRY_COUNT/$MAX_RETRIES at $(date) =====" >> "$LOGFILE"
sleep 5
fi
done
if [ $SUCCESS -eq 0 ]; then
echo "===== Folder $F FAILED after $MAX_RETRIES retries at $(date)
=====" >> "$LOGFILE"
fi
done
echo "All folders processed sequentially. Logs are in $LOGDIR"
End of script.
chmod +x rsync_script.sh
nohup /root/rsync_script.sh > /volume1/rsync_master.log 2>&1 &
Thank you.
Regards,
Mr. Turritopsis Dohrnii Teo En Ming
Extremely Democratic People's Republic of Singapore
28 Jan 2026 Wednesday 7.24 pm Singapore Time
Roland privat
2026-Jan-29 22:22 UTC
Finally managed to get rsync script working after working on it for more than 7 hours since 1.30 AM on 28 Jan 2026 Wednesday
it should also be mentioned that current synology dsm operating system comes with rsync 3.1.2, which is ten years old. it seems to be special version as there ist dependency to synology specific libs. furthetmore, an update for that is not in sight, support could not tell any timeframe. roland> Am 29.01.2026 um 13:19 schrieb Turritopsis Dohrnii Teo En Ming via rsync <rsync at lists.samba.org>: > > ?Subject: Finally managed to get rsync script working after working on it for more than 7 hours since 1.30 AM on 28 Jan 2026 Wednesday > > Good day from Singapore, > > I have finally managed to get rsync script working after working on it for more than 7 hours since 1.30 AM on 28 Jan 2026 Wednesday. > > The old Synology DS713+ NAS was backed up to USB external harddisk using Hyper Backup. > > The Hyper Backup on the USB external harddisk was fully restored on the new Synology DS1522+ NAS at 1.30 AM on 28 Jan 2026 Wednesday. > > Since 1.30 AM in the morning, I have been working for more than 7 hours to get the rsync script working, all throughout the night. > > rsync daemon keeps failing with errors, so I had no choice but to turn to rsync SSH. > > Before running rsync SSH, I need to get passwordless SSH login working first. > > 1?? Generate an SSH key on DS713+ (client) > > ssh-keygen -t rsa -b 4096 > > Press Enter to accept the default path: /var/services/homes/rsyncuser/.ssh/id_rsa > > Press Enter again for no passphrase (needed for automation) > > This creates: > > /var/services/homes/rsyncuser/.ssh/id_rsa ? private key (keep secret!) > /var/services/homes/rsyncuser/.ssh/id_rsa.pub ? public key > > 2?? Copy the public key to DS1522+ (server) manually > > SSH into DS1522+ as rsyncuser > > mkdir -p ~/.ssh > > chmod 700 ~/.ssh > > On DS713+, print your public key: > > cat /var/services/homes/rsyncuser/.ssh/id_rsa.pub > > ---public key snipped--- > > On DS1522+, append it to authorized_keys: > > vi ~/.ssh/authorized_keys > > chmod 600 ~/.ssh/authorized_keys > > 3?? Test passwordless login > > ssh rsyncuser at 192.168.0.101 > > The authenticity of host '192.168.0.101 (192.168.0.101)' can't be established. > ECDSA key fingerprint is ---snipped--- > Are you sure you want to continue connecting (yes/no/[fingerprint])? yes > Warning: Permanently added '192.168.0.101' (ECDSA) to the list of known hosts. > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > Permissions 0777 for '/var/services/homes/rsyncuser/.ssh/id_rsa' are too open. > It is required that your private key files are NOT accessible by others. > This private key will be ignored. > Load key "/var/services/homes/rsyncuser/.ssh/id_rsa": bad permissions > rsyncuser at 192.168.0.101's password: > > On DS713+: > > chmod 700 /var/services/homes/rsyncuser/.ssh > > chmod 600 /var/services/homes/rsyncuser/.ssh/id_rsa > > chmod 644 /var/services/homes/rsyncuser/.ssh/id_rsa.pub > > Passwordless ssh login is now successful. > > Test rsync for 1 shared folder > > 1st test: > > nohup rsync -aHAX --numeric-ids \ > --partial --info=progress2,stats2,name \ > --outbuf=L \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/1 Sales/" \ > "rsyncuser at 192.168.0.101:/volume1/1 Sales/" \ >>> /volume1/rsync_1_Sales.log 2>&1 & > > 2nd test: > > nohup rsync -aHAX --numeric-ids \ > --partial --progress --verbose \ > --outbuf=L \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/1 Sales/" \ > "rsyncuser at 192.168.0.101:/volume1/1 Sales/" \ >>> /volume1/rsync_1_Sales.log 2>&1 & > > No output for above rsync runs. > > Test rsync for small folder "web" > > rsync -av --progress \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/web/" \ > "rsyncuser at 192.168.0.101:/volume1/web/" > > Result: > > sending incremental file list > rsync: opendir "/volume1/web/web_images" failed: Permission denied (13) > ./ > @eaDir/ > @eaDir/@tmp/ > > sent 356 bytes received 29 bytes 256.67 bytes/sec > total size is 2,310 speedup is 6.00 > rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1462) [sender=3.1.2] > > > Test rsync again with exclude eaDir > > rsync -av --progress \ > --exclude='@eaDir/' \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/web/" \ > "rsyncuser at 192.168.0.101:/volume1/web/" > > Result: > > sending incremental file list > rsync: opendir "/volume1/web/web_images" failed: Permission denied (13) > > sent 275 bytes received 14 bytes 192.67 bytes/sec > total size is 2,310 speedup is 7.99 > rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1462) [sender=3.1.2] > > ? CORRECT FIX (safe, Synology-approved) > > You need to re-apply and enforce ACL inheritance on the source NAS (DS713+). > > sudo synoacltool -add /volume1/web rsyncuser:allow:rwx > > Result: > > (synoacltool.c, 253)Unknown error > > > sudo synoacltool -enforce-inherit /volume1/web > > rsyncuser at DiskStation:~/.ssh$ sudo -u rsyncuser ls /volume1/web/web_images > ls: cannot open directory '/volume1/web/web_images': Permission denied > > ? Working approach: run rsync as root via SSH > > Since your goal is migration to DS1522+, the easiest solution that actually works on DS713+ is: > > Use root on DS713+ as the source > > Use SSH rsync with passwordless keys for root > > Exclude @eaDir > > This avoids all ACL problems because root can read every folder, including legacy ACL-protected subfolders. > > On DS713+: > > sudo -i > ssh-keygen -t rsa > > Generating public/private rsa key pair. > Enter file in which to save the key (/root/.ssh/id_rsa): > Enter passphrase (empty for no passphrase): > Enter same passphrase again: > Your identification has been saved in /root/.ssh/id_rsa > Your public key has been saved in /root/.ssh/id_rsa.pub > The key fingerprint is: > ---snipped--- > The key's randomart image is: > +---[RSA 3072]----+ > ---snipped--- > +----[SHA256]-----+ > > cat /root/.ssh/id_rsa.pub > > ---public key snipped--- > > On DS1522+: > > echo "---public key snipped---" >> /var/services/homes/rsyncuser/.ssh/authorized_keys > > > chmod 600 /var/services/homes/rsyncuser/.ssh/authorized_keys > chown -R rsyncuser:users /var/services/homes/rsyncuser/.ssh > > Now root on DS713+ ? rsyncuser on DS1522+ is passwordless. > > Test rsync again. > > rsync -aAX --numeric-ids --partial \ > --exclude='@eaDir/' \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/web/" \ > "rsyncuser at 192.168.0.101:/volume1/web/" \ >>> /volume1/rsync_web.log > > rsync: failed to modify permissions on "/volume1/web/intranet": Operation not permitted (1) > rsync: rsync_xal_set: set_xattr_syno_acl(""/volume1/web/."","user.rsync.synoacl") failed: Permission denied (13) > rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1462) [sender=3.1.2] > > Test rsync again: > > rsync -a --numeric-ids --partial \ > --exclude='@eaDir/' \ > --no-acls --no-xattrs \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/web/" \ > "rsyncuser at 192.168.0.101:/volume1/web/" \ >>> /volume1/rsync_web.log > > rsync: failed to set permissions on "/volume1/web/.htaccess": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/index.html": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/intranet": Operation not permitted (1) > rsync: failed to modify permissions on "/volume1/web/intranet": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/intranet/***_index.php": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/intranet/index.php": Operation not permitted (1) > rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1462) [sender=3.1.2] > > Test rsync again: > > rsync -av --numeric-ids --partial \ > --exclude='@eaDir/' \ > --chmod=ugo=rwX \ > --no-acls --no-xattrs \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/web/" \ > "rsyncuser at 192.168.0.101:/volume1/web/" \ >>> /volume1/rsync_web.log > > rsync: failed to set permissions on "/volume1/web/.htaccess": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/intranet/***_index.php": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/intranet/index.php": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/web_images": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/web_images/bg.png": Operation not permitted (1) > rsync: failed to set permissions on "/volume1/web/web_images/icon.png": Operation not permitted (1) > rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1462) [sender=3.1.2] > > Test rsync again: > > rsync -rltDv --progress \ > --exclude='@eaDir/' \ > --no-perms --no-owner --no-group --no-acls --no-xattrs \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/web/" \ > "rsyncuser at 192.168.0.101:/volume1/web/" \ >>> /volume1/rsync_web.log > > Output: > > sending incremental file list > > sent 280 bytes received 14 bytes 196.00 bytes/sec > total size is 233,274 speedup is 793.45 > > New rsync script: > > vi rsync_script.sh > > #!/bin/bash > # DS713+ -> DS1522+ migration via rsync over SSH > # All shared folders in a loop, passwordless SSH, background-safe > > # Target NAS and user > TARGET_USER="rsyncuser" > TARGET_HOST="192.168.0.101" > > # Shared folders to migrate > FOLDERS=( > "1 Sales" > "2 OPERATIONS" > "3 Admin" > "4 ISO 9001" > "5 Finance" > "6 IT" > "7 Volume_1" > "8" > "8 SynologyLog" > "Completed Projects" > "Disk 2" > "docker" > "OSV and LLP" > "Volume_2" > "web" > "web_packages" > ) > > # Base log folder on source NAS > LOGDIR="/volume1/rsync_logs" > mkdir -p "$LOGDIR" > > # Loop over folders > for F in "${FOLDERS[@]}"; do > # Escape spaces in folder name for rsync destination > DEST_FOLDER="$F" > > echo "Starting rsync for folder: $F" > > nohup rsync -rltDv --progress \ > --exclude='@eaDir/' \ > --no-perms --no-owner --no-group --no-acls --no-xattrs \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/$F/" \ > "$TARGET_USER@$TARGET_HOST:/volume1/$DEST_FOLDER/" \ >>> "$LOGDIR/rsync_$(echo $F | tr ' ' '_').log" 2>&1 & > > done > > echo "All rsync jobs started in background. Logs are in $LOGDIR" > > End of script. > > > > chmod +x rsync_script.sh > > /root/rsync_script.sh > > Output: > > root at DiskStation:/volume1/rsync_logs# tail -f rsync_1_Sales.log > kex_exchange_identification: Connection closed by remote host > rsync error: unexplained error (code 255) at io.c(254) [sender=3.1.2] > > Test another script: > > #!/bin/bash > # Sequential background rsync for Synology migration > # Source: DS713+, Target: DS1522+ (rsyncuser) > # One folder at a time to avoid SSH session limits > > TARGET_USER="rsyncuser" > TARGET_HOST="192.168.0.101" > > FOLDERS=( > "1 Sales" > "2 OPERATIONS" > "3 Admin" > "4 ISO 9001" > "5 Finance" > "6 IT" > "7 Volume_1" > "8" > "8 SynologyLog" > "Completed Projects" > "Disk 2" > "docker" > "OSV and LLP" > "Volume_2" > "web" > "web_packages" > ) > > LOGDIR="/volume1/rsync_logs" > mkdir -p "$LOGDIR" > > for F in "${FOLDERS[@]}"; do > LOGFILE="$LOGDIR/rsync_$(echo $F | tr ' ' '_').log" > echo "===== Starting rsync for folder: $F at $(date) =====" >> "$LOGFILE" > > # Run rsync sequentially but in background via nohup > nohup rsync -rltDv --progress \ > --exclude='@eaDir/' \ > --no-perms --no-owner --no-group --no-acls --no-xattrs \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/$F/" \ > "$TARGET_USER@$TARGET_HOST:/volume1/$F/" \ >>> "$LOGFILE" 2>&1 > > echo "===== Completed rsync for folder: $F at $(date) =====" >> "$LOGFILE" > done > > echo "All rsync folders queued sequentially in nohup. Logs in $LOGDIR" > > End of script > > nohup /root/rsync_script.sh & > > Output: > > ===== Starting rsync for folder: 1 Sales at Wed Jan 28 12:31:35 +08 2026 ====> sending incremental file list > rsync: [sender] write error: Broken pipe (32) > rsync error: error in socket IO (code 10) at io.c(871) [sender=3.1.2] > ===== Completed rsync for folder: 1 Sales at Wed Jan 28 12:31:37 +08 2026 ====> > Testing another script: > > #!/bin/bash > # DS713+ -> DS1522+ migration via SSH rsync > # Sequentially process 16 shared folders, per-folder logging > # Skip ACLs/xattrs to avoid permission errors > # Exclude @eaDir > > # Target NAS and user > TARGET_USER="rsyncuser" > TARGET_HOST="192.168.0.101" > > # Shared folders to migrate > FOLDERS=( > "1 Sales" > "2 OPERATIONS" > "3 Admin" > "4 ISO 9001" > "5 Finance" > "6 IT" > "7 Volume_1" > "8" > "8 SynologyLog" > "Completed Projects" > "Disk 2" > "docker" > "OSV and LLP" > "Volume_2" > "web" > "web_packages" > ) > > # Base log folder on source NAS > LOGDIR="/volume1/rsync_logs" > mkdir -p "$LOGDIR" > > # Loop through folders sequentially > for F in "${FOLDERS[@]}"; do > LOGFILE="$LOGDIR/rsync_$(echo "$F" | tr ' ' '_').log" > echo "===== Starting rsync for folder: $F at $(date) =====" >> "$LOGFILE" > > rsync -rltDv --progress \ > --exclude='@eaDir/' \ > --no-perms --no-owner --no-group --no-acls --no-xattrs \ > -e "ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=20" \ > "/volume1/$F/" \ > "$TARGET_USER@$TARGET_HOST:/volume1/$F/" \ >>> "$LOGFILE" 2>&1 > > echo "===== Completed rsync for folder: $F at $(date) =====" >> "$LOGFILE" > done > > echo "All folders have been processed sequentially. Logs are in $LOGDIR" > > > > > nohup /root/rsync_script.sh > /volume1/rsync_master.log 2>&1 & > > Output: > > ===== Starting rsync for folder: 1 Sales at Wed Jan 28 12:37:26 +08 2026 ====> sending incremental file list > rsync: [sender] write error: Broken pipe (32) > rsync error: error in socket IO (code 10) at io.c(871) [sender=3.1.2] > ===== Completed rsync for folder: 1 Sales at Wed Jan 28 12:37:27 +08 2026 ====> > > > > GRAND FINAL WORKING RSYNC SCRIPT - CONFIRMED AND TESTED TO BE WORKING! - AS AT 28 JAN 2026 Wednesday 1.36 PM > =============================================================================================================> > #!/bin/bash > # Bulletproof Synology migration script: DS713+ -> DS1522+ > # Sequential SSH rsync for 16 shared folders > # Handles spaces, retries, logs, #recycle excluded > > # ---------------------------- > # Configuration > # ---------------------------- > TARGET_USER="rsyncuser" > TARGET_HOST="192.168.0.101" > BW_LIMIT=3000 # KB/s, adjust as needed > MAX_RETRIES=3 > LOGDIR="/volume1/rsync_logs" > mkdir -p "$LOGDIR" > > # List of shared folders to migrate > FOLDERS=( > "1 Sales" > "2 OPERATIONS" > "3 Admin" > "4 ISO 9001" > "5 Finance" > "6 IT" > "7 Volume_1" > "8" > "8 SynologyLog" > "Completed Projects" > "Disk 2" > "docker" > "OSV and LLP" > "Volume_2" > "web" > "web_packages" > ) > > # ---------------------------- > # Pre-create all destination folders on DS1522+ > # ---------------------------- > echo "Creating all target folders on $TARGET_HOST..." > for F in "${FOLDERS[@]}"; do > ssh "$TARGET_USER@$TARGET_HOST" "mkdir -p '/volume1/$F'" > done > echo "All destination folders created." > > # ---------------------------- > # Migration loop > # ---------------------------- > for F in "${FOLDERS[@]}"; do > LOGFILE="$LOGDIR/rsync_$(echo "$F" | tr ' ' '_').log" > echo "===== Starting rsync for folder: $F at $(date) =====" >> "$LOGFILE" > > RETRY_COUNT=0 > SUCCESS=0 > > while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do > rsync -rltDv --progress \ > --exclude='@eaDir/' \ > --exclude='#recycle/' \ > --no-perms --no-owner --no-group --no-acls --no-xattrs \ > --bwlimit=$BW_LIMIT \ > -e "ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=10 -o TCPKeepAlive=yes" \ > "/volume1/$F/" \ > "$TARGET_USER@$TARGET_HOST:'/volume1/$F/'" \ >>> "$LOGFILE" 2>&1 > > if [ $? -eq 0 ]; then > SUCCESS=1 > echo "===== Completed rsync for folder: $F at $(date) SUCCESS =====" >> "$LOGFILE" > break > else > RETRY_COUNT=$((RETRY_COUNT+1)) > echo "===== rsync FAILED for folder: $F, retry $RETRY_COUNT/$MAX_RETRIES at $(date) =====" >> "$LOGFILE" > sleep 5 > fi > done > > if [ $SUCCESS -eq 0 ]; then > echo "===== Folder $F FAILED after $MAX_RETRIES retries at $(date) =====" >> "$LOGFILE" > fi > done > > echo "All folders processed sequentially. Logs are in $LOGDIR" > > End of script. > > > chmod +x rsync_script.sh > > nohup /root/rsync_script.sh > /volume1/rsync_master.log 2>&1 & > > Thank you. > > Regards, > > Mr. Turritopsis Dohrnii Teo En Ming > Extremely Democratic People's Republic of Singapore > 28 Jan 2026 Wednesday 7.24 pm Singapore Time > > > > > > > -- > Please use reply-all for most replies to avoid omitting the mailing list. > To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync > Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html