Moje boje z UDF

Coś mnie dzisiaj podkusiło, żeby wypalić na dvd parę dużych plików. Zdarzenie to wzbogaciło wydatnie moją wiedzę na temat formatu UDF. Jak się okazuje, rozszerzenia UDF są niezbędne, żeby nagrać pliki większe niż 2GB na płytę. K3B automatycznie dodaje struktury UDF, jeśli ma do czynienia z plikami tych gabarytów i w ten sposób powstaje hybrydowy dysk ISO+UDF. I wszystko byłoby pięknie... poza problemami z uprawnieniami.

Wygląda na to, że najnowsza wersja cdrtools (2.01.01_alpha37) ma bug powodujący ich wyzerowanie (odpowiednik chmod 000). Skutek: Tylko root może przeglądać płytę. Automount głupieje. Doświadczalnie sprawdziłem, że cdrtools nie ma monopolu na złe uprawnienia. Te same objawy mam z płytami ze stacjonarnego DVD recordera.

Cóż więc można w tej sytuacji zrobić? W końcu pliki są nagrane poprawnie. To tylko kwestia uprawnień, nie? Metodą prób i błędów wyeliminowałem hala i udeva jako sprawców. Pozostał tylko kernel. Zapuściłem się więc w /usr/src/linux/fs/udf/ i w inode.c znalazłem interesujący kawałek kodu o nazwie udf_convert_permissions. Parę sprytnych modyfikacji i nasza kochana funkcja ignoruje uprawnienia na płycie i wypluwa takie jak chcemy. Nie jest to może szczególnie piękne, ale działa. Patch dla zainteresowanych.

Nie był to jednak koniec przygód. Później postanowiłem nagrać jeszcze większy plik, zajmujący więcej niż 4GB. I tu kolejna niespodzianka. Cdrtools nie radzi sobie z takimi plikami. W momencie nagrywania zostałem poinformowany, że pliki większe niż 4GB zostaną zignorowane. Wynikiem była zamknięta płyta z niczym. Przemilczmy to, że w K3B takie ostrzeżenie powinno pojawić raczej PRZED nagrywaniem. Powiem tylko tyle: problem nie istnieje w forku cdrtools o nazwie cdrkit. Co więcej, fork ten pozbawiony jest też wrednego buga z uprawnieniami. Cdrtools wyleciał z dużą prędkością horyzontalną z mojego dysku (no, w przenośni) i we wszechświecie znowu zapanował pokój. Zobaczymy na jak długo.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *