Discussion:
Android rsync probleem
(te oud om op te antwoorden)
Cecil Westerhof
2023-03-15 13:28:47 UTC
Permalink
I heb een Lenova Android tablet.
Wanneer ik die mount in nemo zie ik:
mtp://LENOVO_Lenovo_TB-8705F_HA141AZC/

Op de command-line moet ik dan naar:
/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/

Wanneer ik naar de Andoid directory ga, dan kan ik zonder problemen
doen:
rsync -avuP Documents/ ~/Documents/Lenova/Documents/

Als ik dan op de Linux directory iets aanpas en dan doe:
rsync -avuP ~/Documents/Lenova/Documents/ Documents/

Dan krijg ik:
rsync: [receiver] mkstemp
"/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal
shared storage/Documents/.todo.txt.DWQONE" failed: Operation not
supported (95)

en:
rsync error: some files/attrs were not transferred (see previous
errors) (code 23) at main.c(1333) [sender=3.2.3]


Wat kan hier aan de hand zijn?


Dit is op Debian 11 met:
rsync version 3.2.3 protocol version 31
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
Oscar
2023-03-21 09:37:07 UTC
Permalink
Wat is nemo voor een ding?
Post by Cecil Westerhof
rsync: [receiver] mkstemp
"/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal
shared storage/Documents/.todo.txt.DWQONE" failed: Operation not
supported (95)
Rsync heeft hier moeite met het creeren van .todo.txt.DWQONE in de
directory storage/Documents omdat deze bewerking niet ondersteund wordt
door het onderliggende filesystem...
Post by Cecil Westerhof
rsync error: some files/attrs were not transferred (see previous
errors) (code 23) at main.c(1333) [sender=3.2.3]
... en daarom kon rsync een of meer bestanden of eigenschappen daarvan
niet overbrengen.
Post by Cecil Westerhof
Wat kan hier aan de hand zijn?
Van alles. Komt de file wel aan? Dan kan het een onschuldige melding
zijn dat bepaalde attributen niet overgenomen konden worden. Je zou eens
kunnen kijken wat mkstemp precies doet. Is dat een secure mktemp of zo?

Het kan ook zijn dat het fs uberhaupt geen schrijfacties ondersteunt.
Dat is simpel te controleren door zelf iets proberen te schrijven.

De derde mogelijkheid is dat het FS niet overweg kan met de naam. Ook
dat kan je testen als je wel kan schrijven.

Sowieso is het wel nuttig om te weten dat rsync tijdens de transfer een
tijdelijke filename gebruikt. Hier probeer je "todo.txt" te syncen. Daar
zet rsync een punt voor en plakt er nog een random string achteraan. Of
eigenlijk, rsync gebruikt zo te zien de call 'mkstemp' om dat voor hem
te doen. Als de transfer lukt, dan volgt een mv naar de originele naam.
Wordt de transfer afgebroken, maar heeft rsync nog wel een verbinding,
dan wordt ie gedelete. In het ergste geval vind je later dit tijdelijke
bestand terug in je directory, maar dan weet je nu dat het een restant
is van een mislukte rsync.
--
[J|O|R] <- .signature.gz
Cecil Westerhof
2023-03-24 08:11:18 UTC
Permalink
Post by Oscar
Wat is nemo voor een ding?
Een file manager die ik in xfce4 gebruik omdat thunar een aantal
'problemen' geeft.
https://en.wikipedia.org/wiki/Nemo_(file_manager)
Post by Oscar
Post by Cecil Westerhof
rsync: [receiver] mkstemp
"/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal
shared storage/Documents/.todo.txt.DWQONE" failed: Operation not
supported (95)
Rsync heeft hier moeite met het creeren van .todo.txt.DWQONE in de
directory storage/Documents omdat deze bewerking niet ondersteund wordt
door het onderliggende filesystem...
Vreemd: ik zie dat bestand met een grote van 0 bytes daar staan.
-rw------- 1 cecil cecil 0 Mar 15 12:26 .todo.txt.DWQONE
Post by Oscar
Post by Cecil Westerhof
rsync error: some files/attrs were not transferred (see previous
errors) (code 23) at main.c(1333) [sender=3.2.3]
... en daarom kon rsync een of meer bestanden of eigenschappen daarvan
niet overbrengen.
Kan het zijn dat het bestand wel kan worden aangemaakt, maar dat de
bewerkingen niet kunnen worden gedaan?
Post by Oscar
Post by Cecil Westerhof
Wat kan hier aan de hand zijn?
Van alles. Komt de file wel aan? Dan kan het een onschuldige melding
zijn dat bepaalde attributen niet overgenomen konden worden. Je zou eens
kunnen kijken wat mkstemp precies doet. Is dat een secure mktemp of zo?
Als er geen bestanden zijn gaat alles goed, maar zodra een van de
bestanden die moet worden gesynchroniseerd er wel is, gaat het fout.
Post by Oscar
Het kan ook zijn dat het fs uberhaupt geen schrijfacties ondersteunt.
Dat is simpel te controleren door zelf iets proberen te schrijven.
Dat is het dus niet, wanneer er geen bestanden zijn, gaat alles goed.
Echter als er een todo.txt staat, dan gaat het fout.
Post by Oscar
De derde mogelijkheid is dat het FS niet overweg kan met de naam. Ook
dat kan je testen als je wel kan schrijven.
Dat is het dus niet, want het bestand staat er gewoon.
Post by Oscar
Sowieso is het wel nuttig om te weten dat rsync tijdens de transfer een
tijdelijke filename gebruikt. Hier probeer je "todo.txt" te syncen. Daar
zet rsync een punt voor en plakt er nog een random string achteraan. Of
eigenlijk, rsync gebruikt zo te zien de call 'mkstemp' om dat voor hem
te doen. Als de transfer lukt, dan volgt een mv naar de originele naam.
Wordt de transfer afgebroken, maar heeft rsync nog wel een verbinding,
dan wordt ie gedelete. In het ergste geval vind je later dit tijdelijke
bestand terug in je directory, maar dan weet je nu dat het een restant
is van een mislukte rsync.
Dat is dus wat er gebeurd.


Maar er gebeurd iets vreemds. Als ik op mijn Linux commandline geef:
touch dummy

Dan krijg ik:
touch: setting times of 'dummy': Operation not supported

Maar dummy is wel aangemaakt:
-rw------- 1 cecil cecil 0 Mar 24 09:00 dummy

Een 'rm dummy' werkt zonder problemen. Een 'touch dummy' geeft
dezelfde melding en $? bevat dan 1. En dummy is gewoon aangemaakt.

Als ik geef:
mv todo.txt todo2.txt

Dan krijg ik:
mv: cannot move 'todo.txt' to 'todo2.txt': Input/output error

Dan bevat $? ook 1 en in dit geval is de mv ook daadwerkelijk niet
uitgevoerd.

Het bijzondere is dat ik in de file manager todo.txt wel kan hernoemen
naar todo2.txt.


Voor als het van belang is, mount geeft:
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
Oscar
2023-03-30 09:11:28 UTC
Permalink
[Crosspost naar nl.comp.os.linux.techniek]
Post by Cecil Westerhof
Post by Oscar
Wat is nemo voor een ding?
Een file manager die ik in xfce4 gebruik omdat thunar een aantal
'problemen' geeft.
https://en.wikipedia.org/wiki/Nemo_(file_manager)
Oh, ken ik allemaal niet zo. Maar heeft nemo zijn eigen Android
ondersteuning of maakt die gewoon gebruik van de onderliggende mount van
het systeem, waar jij met rsync tegenaan praat?
Post by Cecil Westerhof
Post by Oscar
Post by Cecil Westerhof
rsync: [receiver] mkstemp
"/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal
shared storage/Documents/.todo.txt.DWQONE" failed: Operation not
supported (95)
Rsync heeft hier moeite met het creeren van .todo.txt.DWQONE in de
directory storage/Documents omdat deze bewerking niet ondersteund wordt
door het onderliggende filesystem...
Vreemd: ik zie dat bestand met een grote van 0 bytes daar staan.
-rw------- 1 cecil cecil 0 Mar 15 12:26 .todo.txt.DWQONE
Niet zo vreemd. Blijkbaar kon mkstemp de file wel aanmaken, maar ging
het bij een volgende stap verkeerd. Nuttige informatie.
Post by Cecil Westerhof
Post by Oscar
Post by Cecil Westerhof
rsync error: some files/attrs were not transferred (see previous
errors) (code 23) at main.c(1333) [sender=3.2.3]
... en daarom kon rsync een of meer bestanden of eigenschappen daarvan
niet overbrengen.
Kan het zijn dat het bestand wel kan worden aangemaakt, maar dat de
bewerkingen niet kunnen worden gedaan?
Check. Jammer dat je niet laat zien hoe de originele todo.txt er uit
ziet, maar als die verschilt van 'mode 600, cecil:cecil' dan zal rsync
dat proberen aan te passen. Je gaf immers '-a/--archive' mee als
parameter.
Post by Cecil Westerhof
Post by Oscar
Post by Cecil Westerhof
Wat kan hier aan de hand zijn?
Van alles. Komt de file wel aan? Dan kan het een onschuldige melding
zijn dat bepaalde attributen niet overgenomen konden worden. Je zou eens
kunnen kijken wat mkstemp precies doet. Is dat een secure mktemp of zo?
Als er geen bestanden zijn gaat alles goed, maar zodra een van de
bestanden die moet worden gesynchroniseerd er wel is, gaat het fout.
Uit man rsync(1):
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)

Je kan -a vervangen door -rlptgoD en dan een voor een letters er af
halen tot het werkt. Of eerst proberen met alleen -r/--recursive en
letters toevoegen tot het niet meer werkt.


Ik ben eigenlijk wel benieuwd of alleen -r al wel resultaat geeft?
Post by Cecil Westerhof
Post by Oscar
Het kan ook zijn dat het fs uberhaupt geen schrijfacties ondersteunt.
Dat is simpel te controleren door zelf iets proberen te schrijven.
Dat is het dus niet, wanneer er geen bestanden zijn, gaat alles goed.
Echter als er een todo.txt staat, dan gaat het fout.
Post by Oscar
De derde mogelijkheid is dat het FS niet overweg kan met de naam. Ook
dat kan je testen als je wel kan schrijven.
Dat is het dus niet, want het bestand staat er gewoon.
Check. Dat was dan ook nuttige info.
Post by Cecil Westerhof
Post by Oscar
Sowieso is het wel nuttig om te weten dat rsync tijdens de transfer een
tijdelijke filename gebruikt. Hier probeer je "todo.txt" te syncen. Daar
zet rsync een punt voor en plakt er nog een random string achteraan. Of
eigenlijk, rsync gebruikt zo te zien de call 'mkstemp' om dat voor hem
te doen. Als de transfer lukt, dan volgt een mv naar de originele naam.
Wordt de transfer afgebroken, maar heeft rsync nog wel een verbinding,
dan wordt ie gedelete. In het ergste geval vind je later dit tijdelijke
bestand terug in je directory, maar dan weet je nu dat het een restant
is van een mislukte rsync.
Dat is dus wat er gebeurd.
Niet heel netjes van rsync. Eigenlijk zou hij dat mislukte tijdelijke
bestand weer op moeten ruimen, maar misschien kan dat niet. Als de call
'mkstemp()' alleen maar doorgeeft dat er iets fout ging, zonder aan te
geven of er misschien al een file was aangemaakt, kan rsync ook niet
weten wat er opgeruimd moet worden.

Dit zou wel eens tot verhitte discussies tussen de developers kunnen
leiden. Wie is er in zo'n geval verantwoordelijk voor het opruimen van
het tijdelijke bestand, en waarom?

Dat het bestand nog bestaat, is wel handig bij het troubleshooten. Maar
net als 'finder droppings' is het naar de gebruiker toe onverwachte
vervuiling van het filesystem.
Post by Cecil Westerhof
touch dummy
touch: setting times of 'dummy': Operation not supported
Hmm.. Het is duidelijk geen volledige implementatie van een filesystem.
Als jij -a tegen rsync zegt, wil hij alle attributen van de file
meenemen naar de overkant. Als het filesystem al niet overweg kan met
het aanpassen van de tijden, dan zal die ook wel niet veel kunnen met
ingewikkeldere dingen, zoals unix permissies.
Post by Cecil Westerhof
-rw------- 1 cecil cecil 0 Mar 24 09:00 dummy
Stap 0: touch kijkt op de klok. Dat lukt.
Stap 1: touch ziet dat de file nog niet bestaat.
Stap 2: touch maakt de nieuwe file. Dat lukt.
Stap 3: touch wil de tijd aanpassen naar die van Stap 0. Mislukt.

Nu blijf jij achter met een foutmelding en een file die wel bestaat,
maar nog niet de tijd heeft die je wou. Of in dit geval eigenlijk wel,
maar touch kan in principe ook andere tijden aan een file geven. Ik kan
me dus voorstellen dat de "tijd om te geven" wordt bepaald tijdens het
lezen van de argumenten, ook al is in dit geval de default tijd goed
genoeg.
Post by Cecil Westerhof
Een 'rm dummy' werkt zonder problemen. Een 'touch dummy' geeft
dezelfde melding en $? bevat dan 1. En dummy is gewoon aangemaakt.
Verklaarbaar als touch inderdaad volgens die stappen werkt. De
foutmelding is immers "ik kon de tijden van de file niet aanpassen!"
Post by Cecil Westerhof
mv todo.txt todo2.txt
mv: cannot move 'todo.txt' to 'todo2.txt': Input/output error
Dan bevat $? ook 1 en in dit geval is de mv ook daadwerkelijk niet
uitgevoerd.
Jemig, kan dat filesystem ook al niet renamen? Een mv binnen dezelfde
mount wordt immers uitgevoerd met de rename(2) systemcall.

Zijstapje omdat vrijwel niemand dat tegenwoordig nog weet: Als je een
getalletje tussen haakjes achter een naampje ziet staan, dan is dat het
hoofdstuk in de manpages waar je meer info kan vinden.

Doe je 'man rename' dan krijg je mogelijk de man-page van het commando
'rename' uit hoofdstuk 1 (user commands) als je toevallig het pakketje
rename hebt geinstalleerd. Je kan man vragen om in hoofdstuk 2 (system
calls) te kijken met: 'man 2 rename'. Op dezelfde manier heb je 'man 2
mount' en 'man 8 mount'. De ene voor de systemcall, de andere voor het
admin commando.

Met 'man -wa naampje' kun je zien welke manual pages met naampje je
allemaal geinstalleerd hebt. Met 'manpages-dev' geinstalleerd, krijg je
bijvoorbeeld zoiets:

***@linux:~$ man -wa mount | xargs dpkg -S
mount: /usr/share/man/man8/mount.8.gz
manpages-dev: /usr/share/man/man2/mount.2.gz

Maar ik dwaal af...
Post by Cecil Westerhof
Het bijzondere is dat ik in de file manager todo.txt wel kan hernoemen
naar todo2.txt.
Het kan zijn dat die onzichtbaar twee pogingen doet:

result = rename(oldname, newname);
if(!result) {
// oh jammer, toch niet dezelfde partitie
result = copy(oldname, newname);
if(result) unlink(oldname);
}

Ik heb het op mijn mac wel eens als ik een samba share mount, waar op de
onderliggende linux-machine weer verschillende mountpoints heb hangen.
Vanaf de mac gezien lijkt dat 1 filesystem, maar als ik iets wil moven
van de ene plek naar de andere, dan geeft de server een error op het
rename() commando. Daar snapt 'mv' dan helemaal niks van, dus die geeft
mij weer een foutmelding, terwijl die terug zou moeten vallen naar
copy&delete.

Nou heb jij daar een filesystem dat de rename() call niet
geimplementeerd heeft, waar mv net zo goed van in de war raakt.
Post by Cecil Westerhof
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
Ziet er inderdaad uit als een handjevol code onder het fuse-systeem van
linux. Ik heb daar laatst ook wat mee lopen spelen om te snappen wat er
fout gaat op een produktiesysteem op mijn werk. De kernel biedt daar een
interface tussen wat code dat in user-space draait en programma's die
denken dat ze een echt filesytem benaderen. Je kan zoveel calls
implementeren als je wil en teruggeven wat je wil, als het maar in de
API past. Bij mijn experimentje kon je alleen ls en cat doen. Met ls zag
je een file. Met 'cat diefile' zag je wat tekst. Alle andere handelingen
gaven een foutmelding omdat ik ze niet geimplementeerd had.

Jouw Android-koppel-appje biedt je net genoeg om bestanden van en naar
je toestel te kopieren en verder moet je er gewoon niet al te veel van
verwachten.

TL;DR: probeer eens rsync -rv ... ipv rscync -av ...
--
[J|O|R] <- .signature.gz
Oscar
2023-03-30 09:20:11 UTC
Permalink
Post by Oscar
result = rename(oldname, newname);
if(!result) {
// oh jammer, toch niet dezelfde partitie
result = copy(oldname, newname);
if(result) unlink(oldname);
}
Misschien ten overvloede, maar: DO NOT RUN THIS AT HOME!

Dit lijkt misschien een beetje op werkende C-code, maar ik heb niet eens
de moeite genomen om op te zoeken hoe rename(2) ook alweer werkt, laat
staan of de error-checking goed werkt. Grote kans dat ik hem net
verkeerd om gebruik. Als result een foutcode is, dan is 0 juist goed.
--
[J|O|R] <- .signature.gz
Cecil Westerhof
2023-03-30 12:17:45 UTC
Permalink
***@xs4all.nl (Oscar) writes:

Ik ga het geheel eens doorwerken. Maar kan op een ding al wel antwoord
geven. (Denk ik.)
Post by Oscar
[Crosspost naar nl.comp.os.linux.techniek]
Post by Cecil Westerhof
Post by Oscar
Wat is nemo voor een ding?
Een file manager die ik in xfce4 gebruik omdat thunar een aantal
'problemen' geeft.
https://en.wikipedia.org/wiki/Nemo_(file_manager)
Oh, ken ik allemaal niet zo. Maar heeft nemo zijn eigen Android
ondersteuning of maakt die gewoon gebruik van de onderliggende mount van
het systeem, waar jij met rsync tegenaan praat?
Volgens mij spreekt nemo gewoon met het file systeem, maar op een
andere manier dan rsync.

Nemo gebruikt:
mtp://LENOVO_Lenovo_TB-8705F_HA141AZC/

Terwijl rsync gebruikt:
/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/

Ik kan straks ook weleens kijken wat thunar gebruikt. Ik neem aan
hetzelfde als nemo, maar het kan geen kwaad om het te checken.
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
Oscar
2023-03-30 13:49:22 UTC
Permalink
Post by Cecil Westerhof
mtp://LENOVO_Lenovo_TB-8705F_HA141AZC/
/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/
Ik gok dat mtp:// een door Nemo ondersteunde shortcut is voor die
"echte" mount onder /run/user/...

Hoe mount je die laatste? Of doet/nemo/gnome/dbus/whatever dat voor jou
op het moment dat je die mtp:// link benadert?
--
[J|O|R] <- .signature.gz
Cecil Westerhof
2023-03-30 16:35:18 UTC
Permalink
Post by Oscar
Post by Cecil Westerhof
mtp://LENOVO_Lenovo_TB-8705F_HA141AZC/
/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/
Ik gok dat mtp:// een door Nemo ondersteunde shortcut is voor die
"echte" mount onder /run/user/...
Hoe mount je die laatste? Of doet/nemo/gnome/dbus/whatever dat voor jou
op het moment dat je die mtp:// link benadert?
Als ik de Android aankoppel dan wordt onder devices de Android
zichtbaar en als ik daar op klik wordt bij beide mtp:// geopend. Maar
ik kan in beide ook gewoon naar /run/user/ gaan.
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
Cecil Westerhof
2023-03-30 13:00:00 UTC
Permalink
Post by Oscar
TL;DR: probeer eens rsync -rv ... ipv rscync -av ...
Ik geef in:
/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal shared storage/Documents/Old

Het commando:
rsync -rv ~/Documents/Lenova/Documents/Old/ .

En dit levert op:
sending incremental file list
todo2.txt
rsync: [receiver] rename "/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal shared storage/Documents/Old/.todo2.txt.csGp1D" -> "todo2.txt": Input/output error (5)

sent 1,740 bytes received 35 bytes 3,550.00 bytes/sec
total size is 1,632 speedup is 0.92
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1333) [sender=3.2.3]

Het lijkt wel of het erger wordt.

Thunar kijkt op dezelfde plek als nemo.
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
Oscar
2023-03-30 13:59:23 UTC
Permalink
Post by Cecil Westerhof
Post by Oscar
TL;DR: probeer eens rsync -rv ... ipv rscync -av ...
/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal shared storage/Documents/Old
rsync -rv ~/Documents/Lenova/Documents/Old/ .
sending incremental file list
todo2.txt
rsync: [receiver] rename "/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal shared storage/Documents/Old/.todo2.txt.csGp1D" ->
"todo2.txt": Input/output error (5)
Aha!

Nu is het niet meer de call 'mkstemp' die de foutmelding geeft. Die ging
goed en er hoefde ook geen andere attributen meer aangepast te worden.

Maar nu gaat 'rename' fout. Kun je nog eens lezen wat ik schreef bij je
poging tot "mv todo.txt todo2.txt" ? Ik veronderstelde dat dit FS geen
rename() ondersteunt. En ja hoor... het gaat fout als rsync na de
transfer een rename() doet om het tijdelijke bestand de definitieve naam
te geven.
Post by Cecil Westerhof
Het lijkt wel of het erger wordt.
Nee hoor, we zijn al een stap verder.

Kan het zijn dat .todo2.txt.RANDOM nu wel een inhoud heeft?

<gaat even in de manual van rsync zoeken>

probeer eens:

rsync -rv -T /tmp <source> <dest>

Bij deze actie wordt de tijdelijke file in /tmp aangemaakt en wordt
daarna over de destination heen gekopieerd. Niet heel nuttig bij een
lokale transfer, maar rsync was ooit bedoeld voor trage verbindingen.

Een nadeel heb je nu wel: de rename() is atomair, waar copy/delete dat
niet is. Als je niet weet waarom dat belangrijk is, heb je het
waarschijnlijk niet nodig.
--
[J|O|R] <- .signature.gz
Cecil Westerhof
2023-03-30 16:05:04 UTC
Permalink
Post by Oscar
Post by Cecil Westerhof
Post by Oscar
TL;DR: probeer eens rsync -rv ... ipv rscync -av ...
/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal
shared storage/Documents/Old
rsync -rv ~/Documents/Lenova/Documents/Old/ .
sending incremental file list
todo2.txt
rsync: [receiver] rename
"/run/user/1000/gvfs/mtp:host=LENOVO_Lenovo_TB-8705F_HA141AZC/Internal
shared storage/Documents/Old/.todo2.txt.csGp1D" ->
"todo2.txt": Input/output error (5)
Aha!
Nu is het niet meer de call 'mkstemp' die de foutmelding geeft. Die ging
goed en er hoefde ook geen andere attributen meer aangepast te worden.
Maar nu gaat 'rename' fout. Kun je nog eens lezen wat ik schreef bij je
poging tot "mv todo.txt todo2.txt" ? Ik veronderstelde dat dit FS geen
rename() ondersteunt. En ja hoor... het gaat fout als rsync na de
transfer een rename() doet om het tijdelijke bestand de definitieve naam
te geven.
Post by Cecil Westerhof
Het lijkt wel of het erger wordt.
Nee hoor, we zijn al een stap verder.
Kan het zijn dat .todo2.txt.RANDOM nu wel een inhoud heeft?
Nee, maar dat had ik niet gemeld: er was helemaal geen
.todo2.txt.csGp1D.
Post by Oscar
<gaat even in de manual van rsync zoeken>
rsync -rv -T /tmp <source> <dest>
Bij deze actie wordt de tijdelijke file in /tmp aangemaakt en wordt
daarna over de destination heen gekopieerd. Niet heel nuttig bij een
lokale transfer, maar rsync was ooit bedoeld voor trage verbindingen.
Dat werkt. En is daarom toch wel nuttig. :-D
Post by Oscar
Een nadeel heb je nu wel: de rename() is atomair, waar copy/delete dat
niet is. Als je niet weet waarom dat belangrijk is, heb je het
waarschijnlijk niet nodig.
Het gaat om bestanden die ik als ik weg ben op de tablet aanpas en als
ik thuis ben op de computer, dus dat gaat geen problemen opleveren
lijkt me.
Waar ik wel aan moet denken dat ik op slechts een plek de bestanden
aanpas en op het moment dat ik wil wisselen ik eerst een (goede) rsync
draai. Maar dat is een stukje discipline. En misschien kan het geen
kwaad om een slim scriptje hiervoor te schrijven.
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
Cecil Westerhof
2023-03-30 16:41:55 UTC
Permalink
Post by Oscar
Post by Cecil Westerhof
mv todo.txt todo2.txt
mv: cannot move 'todo.txt' to 'todo2.txt': Input/output error
Dan bevat $? ook 1 en in dit geval is de mv ook daadwerkelijk niet
uitgevoerd.
Jemig, kan dat filesystem ook al niet renamen? Een mv binnen dezelfde
mount wordt immers uitgevoerd met de rename(2) systemcall.
En als ik doe:
mv ~/Documents/Lenova/Documents/Old/file2move .

Dan krijg ik:
mv: preserving times for './file2move': Operation not supported
mv: preserving permissions for ‘./file2move’: Operation not supported

$? bevat 0 en het bestand is wel verplaatst.

Misschien moet ik een draadje op Debian beginnen.
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
Loading...