Extended file attributes (xattr) nejsou zachovány během copy

Hlášení chyb a problémů programu Altap Salamander. Buďte, prosím, ve svých popisech co nejpodrobnější a vytvořte pro každý incident nový příspěvek. Nevkládejte programem generovaná hlášení o pádu programu, pošlete je e-mailem.
n_petr
Posts: 7
Joined: 16 Jan 2016, 13:58

Extended file attributes (xattr) nejsou zachovány během copy

Post by n_petr » 16 Jan 2016, 14:43

Extended file attributes (xattr) nejsou zachovány během kopírování

How to reproduce:

1) Zkontrolujeme, zdali má linuxový svazek ext3 či ext4 podporu ext_attr: tune2fs -l /dev/<device>
2) Zkontrolujeme, zdali je linuxový svazek ext3 či ext4 připojený* s podporou user_xattr: mount | grep <device>
3) Zkontrolujeme, že je v smb.conf zapnuto "ea support": testparm | grep "ea support"
4) Připojíme svazek přes Sambu do Windows
5) Na linuxu vytvoříme soubor a nastavíme mu extended file atribute: echo xattr_test > xattr_test.txt && setfattr -n user.xattr -v TEST xattr_test.txt
6) Zkontrolujeme, že soubor obsahuje extended file attribute: getfattr -d xattr_test.txt
7) Zkopírujeme [F5] soubor Altap Salamanderem z jedné složky do druhé (obě složky leží na připojeném svazku přes Sambu)
8) Zkontrolujeme, že soubor ztratil extended file attribute - #BUG 1: getfattr -d xattr_test.txt
9) Pokud soubor přesuneme [F6] či modifikujeme [F4], tak je extended file attribute zachován
10) Pokud soubor přepisujeme [F5] či modifikujeme [F4], tak extended file attribute není měněn a je chybně ponechán ten původní z cílového souboru - #BUG 2

*mount mi sice neukazuje user_xattr, ale extended file attributes fungují; možná se to zapíná někde samo (dokonce jde o ext3 svazek, ale i tak jsou options v /proc pod ext4), protože návratová hodnota je rovna jedné: grep -c user_xattr /proc/fs/ext4/md5/options

P. S. Kopírování a přesouvání přes nativní Windows File Explorer funguje správně. Stejně tak kopírování a přesouvání funguje správně v Total Commanderu. Krkolomný workaround, jde udělat takto: Ve zrojové složce stiskneme [Shift + F3]; v nově otevřeném okně File Exploreru stiskneme [Ctrl + C] pro kopírovaný soubor/složku; V cílové složce stikneme [Ctrl + V].

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5196
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Extended file attributes (xattr) nejsou zachovány během

Post by Jan Rysavy » 19 Jan 2016, 20:53

Děkujeme za přesný popis chyby, mrkneme se na to.

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5196
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Extended file attributes (xattr) nejsou zachovány během

Post by Jan Rysavy » 22 Jan 2016, 10:09

Extended attributes jsme prozkoumali. Zatím jsme na ně nenarazili, pod Windows jde o nepoužívanou záležitost. Na Linuxu a OSX se používají. Pod Windows by podle zdrojů měly být podpořeny na NTFS a FAT16, ale pod Windows 7 jsem je dokázal vytvořit pouze na NTFS. Pokud byste s EA chtěli manipulovat ve Windows, můžete pomocí https://github.com/jschicht/EaTools.

Do Salamandera podporu přidáme, ale uděláme to až v beta verzi (po 3.07), abych proběhlo otestování.

n_petr
Posts: 7
Joined: 16 Jan 2016, 13:58

Re: Extended file attributes (xattr) nejsou zachovány během

Post by n_petr » 09 Feb 2016, 02:04

Dobrý den,
moc děkuji za odpověď. Zkusil jsem EaTools a opravdu vypíší uložené rozšířené atributy souboru na připojeném linuxovém svazku přes Sambu do Windows.

Všiml jsem si, že EaTools (https://github.com/jschicht/EaTools/archive/master.zip) nevypisují poslední byte atributu. Zde je opravný patch:

Code: Select all

--- EaQuery.au3	2015-07-27 15:08:58.000000000 +0200
+++ EaQuery_mod.au3	2016-02-09 01:15:28.000000000 +0100
@@ -113,7 +113,7 @@
 				ConsoleWrite("EaValueLength: " & $EaValueLength & @CRLF)
 				If $VerboseLevel = 2 Then
 					ConsoleWrite("EaValue:" & @CRLF)
-					ConsoleWrite(_HexEncode(StringMid($EaValue,1,$EaValueLength*2)) & @CRLF)
+					ConsoleWrite(_HexEncode(StringMid($EaValue,1,$EaValueLength*2+2)) & @CRLF)
 				EndIf
 				ConsoleWrite(@CRLF)
 			EndIf
@@ -126,7 +126,7 @@
 				EndIf
 				$tBuffer = DllStructCreate("byte[" & $EaValueLength & "]")
 				DllStructSetData($tBuffer,1,$EaValue)
-				$write = _WinAPI_WriteFile($hFile2, DllStructGetPtr($tBuffer), $EaValueLength-1, $nBytes)
+				$write = _WinAPI_WriteFile($hFile2, DllStructGetPtr($tBuffer), $EaValueLength, $nBytes)
 				If $write = 0 then
 					ConsoleWrite("Error WriteFile returned: " & _WinAPI_GetLastErrorMessage() & @CRLF)
 					Exit
Změněný skirpt přeložíme do exe pomocí Aut2exe (https://www.autoitscript.com/cgi-bin/ge ... oit-v3.zip):

Code: Select all

Aut2exe.exe /in EaQuery.au3 /out EaQuery_mod.exe
Výpis rozšířených atributů provedeme pomocí:

Code: Select all

EaQuery_mod.exe /Target:xattr_test.txt /Mode:1 /Verbose:2 | more
Betaverzi Salamanderu 3.07 rád otestuji. Máte představu, kdy ji zhruba uvolníte mezi smrtelníky?

P. S. Rozšířené atributy user.checksum.crc, user.checksum.md5, user.checksum.sha1, user.checksum.sha256, user.checksum.sha512 by si zasloužily integraci s pluginem Checksum (jak Verify, tak Calculate & Save). Ještě je vedle hashe zvykem ukládat pomocný rozšířený atribut user.checksum.timestamp, který obsahuje datum poslední modifikace souboru ve tvaru 0000000000.000000000 (mktime.nanoseconds).

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5196
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Extended file attributes (xattr) nejsou zachovány během

Post by Jan Rysavy » 09 Feb 2016, 06:16

Do 3.07 jsme se rozhodli tento patch neimplementovat a to ze dvou důvodů. Prvně chceme 3.07 již konečně vydat a potom jde o změnu kopírovací funkce, kterou bychom rádi prohnali řádným beta testovacím programem.
n_petr wrote:P. S. Rozšířené atributy user.checksum.crc, user.checksum.md5, user.checksum.sha1, user.checksum.sha256, user.checksum.sha512 by si zasloužily integraci s pluginem Checksum (jak Verify, tak Calculate & Save). Ještě je vedle hashe zvykem ukládat pomocný rozšířený atribut user.checksum.timestamp, který obsahuje datum poslední modifikace souboru ve tvaru 0000000000.000000000 (mktime.nanoseconds).
Moc si s tím nejsem jistý, ve Windows světě je podpora pro extended attributes podprahová záležitost. To že to šlape ve FAR a TC je jen náhoda způsobená tím, že standardně kopírují přes standardní Windows API funkci CopyFile(), která extended attributes kopíruje kvůli historické podpoře v jádře NT pro POSIX / OS/2. Celé to vypadá jako relikt. Například podle https://en.wikipedia.org/wiki/Extended_ ... Windows_NT by měly být extended attributes podpořeny na FAT16, což jsem pod Windows 7 nedokázal reprodukovat, takže to zřejmě uměly NT v minulosti, ale už to dále nepodporují. Už jen to, že se za posledních 15+ let nikdo z komunity kolem Salamandera k tomuto problému neozval ukazuje, že je to pro uživatele Salamandera podprahové. Ale jsme fandové a uživatelé Linuxu (i Samby) a tam to vypadá, že používání extended attributes poslední dobou ožívá, takže jsme pro podpoření. Drobnost: mám dojem, že při zkoumání extended attributes jsem potkal v Sambě volbu, která je umožní podávat po SMB protokolu jako ADS (Alternate Data Streams) se specifickým názvem a potom zase převádět zpět. Nepotkal jste to, teď to nemůžu najít? Byl by to samozřejmě jen takový hack, založený na rozšířenější podpoře pro ADS. Ale možná jsem si jen špatně vyložil dokumentaci, netestoval jsem to.

Mimochodem, nepotkal jste pod Windows nějaký archivátor, který by podporoval extended attributes? Zkoumal jsem 7z a RAR, ale nenašel jsem nic. I pod Linuxem je to v tomto směru slabé, viz Extended attributes: the good, the not so good, the bad.

Jinak v EaTools je ještě jedna drobnost, která by stála za patch. Limit všech extended attributes (včetně jejich názvů a struktur) pro jeden soubor na NTFS je 64K. Když jsem postupně zabral do posledního bajtu celý tento prostor, EaTools začaly při listování seznamu extended attributes zobrazovat chybu o malém bufferu.

n_petr
Posts: 7
Joined: 16 Jan 2016, 13:58

Re: Extended file attributes (xattr) nejsou zachovány během

Post by n_petr » 09 Feb 2016, 18:39

Archiver, který podporuje rozšířené atributy ve Windows i Linuxu je např. dar: http://sourceforge.net/projects/dar/files/. Windows verze na NTSF svazku uloží a obnoví všechny rozšířené atributy; při obnově bohužel kapitalizuje jména rozšířených atributů (tenhle nešvar má Windows ve více případech). Na připojeném linuxovém svazku přes Sambu tato Windows verze uloží a obnoví pouze jeden rozšířený atribut. Linuxová verze nad Ext4 svazekem funguje bez chyb - uloží obnoví všechny rozšířené atributy; zachová také malá a velká písmena.

Na linuxu ještě existuje obyčejný tar (musí být ale skompilován s podporou libattr-devel/libattr-dev), star, lustre-tar nebo ten dar.

Zběžně jsem se díval, že implementace záznamu rozšířených atributů je rozdílná. *tary konvergují k SCHILY.xattr. Dar využívá implementaci vlastní. Od POSIX.1e implementace v separátních pax hlavičkách se upouští (využíval ji např. kdysi obyčejný tar).

Ohledně Samby nemáte na mysli vfs_streams_xattr (https://www.samba.org/samba/docs/man/ma ... ttr.8.html)? Zkusil jsem zkopírovat std. windows funkcemi soubor xattr_test.txt na NTFS svazek a EaQuery rozšířené atributy stále vidí - s tou výjimkou, že jména rozšířených atributů kapitalizuje (tenhle nešvar má Windows ve více případech).

Nejdále jsou asi ve standardu pro rozšířené atributy u NFSv4: https://tools.ietf.org/html/draft-naik-nfsv4-xattrs-00.

Kdybych přišel na ten patch pro EaQuery, vložím jej sem. Každopádně limit pro linuxové FS je 4096 bytů v součtu.

P. S. Škoda, že bude xattr patch do Salamandera až později.

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5196
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Extended file attributes (xattr) nejsou zachovány během

Post by Jan Rysavy » 09 Feb 2016, 22:17

Aha, streams_xattr bude ono, při prvním čtení jsem si to špatně vyložil. Díky.

User avatar
Ether
Posts: 1459
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Re: Extended file attributes (xattr) nejsou zachovány během copy

Post by Ether » 05 Jul 2016, 17:10

Microsoft wrote:Inodes in Linux have a number of attributes which don’t exist in Windows, including their owner and group, the file mode, and others. These attributes are stored in NTFS Extended Attributes associated with the files on disk.
- https://blogs.msdn.microsoft.com/wsl/20 ... m-support/

EA začínají ožívat i na Windows. :)
Ελληνικά rulez.

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5196
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Extended file attributes (xattr) nejsou zachovány během copy

Post by Jan Rysavy » 10 Jul 2016, 08:08

Velice zajímavá informace, děkujeme!

Post Reply