Stworzyłem skrypt przyrostowej kopii zapasowej rsync dla mojego serwera, który skopiuje kopię zapasową bazy danych MySQL i określoną ścieżkę folderu na serwer zdalny. Oto kod na Github.
Fragment kodu z wierszy 53-57:
############### Create most current hand link
echo "Creating most current hard link on backup server $most_recent_backup_link"
ssh $remote_backup_server rm -rf ${most_recent_backup_link}
ssh $remote_backup_server cp -alv ${remote_backup_folder}/backup-${backup_folder_name}/ ${most_recent_backup_link}
Mam problem z tworzeniem najnowszych twardych dowiązań na serwerze kopii zapasowych (wiersze 53-57 w programie). Wszystko działa, a rsync kopiuje tylko około 1-2 MB danych. Ale proces kopiowania twardego łącza wykorzystuje około 30 MB danych. Otrzymuję ogromną listę plików do prania, które nie uległy zmianie, a jedyne, które uległy zmianie, są bardzo małe. Zwykle nie stanowi to problemu, ale podczas tworzenia kopii zapasowej co godzinę kopia zapasowa powinna być jak najmniejsza.
Na przykład podczas ostatniej kopii zapasowej rsync przesłał 1,3 MB. Ale katalog kopii zapasowych zwiększył się o 35 MB.
Dlaczego twarde łącza zajmują tyle miejsca na dysku twardym?
find -mindepth 1 -type d | wc -l
i znalazłem, że moja kopia zapasowa ma 1706 wszystkich katalogów.