Scroll to navigation

ioctl_getfsmap(2) System Calls Manual ioctl_getfsmap(2)

NUME

ioctl_getfsmap - extrage structura fizică a sistemului de fișiere

BIBLIOTECA

Biblioteca C standard (libc, -lc)

SINOPSIS

#include <linux/fsmap.h>  /* Definiția constantelor FS_IOC_GETFSMAP,
                             FM?_OF_*, și *FMR_OWN_* */
#include <sys/ioctl.h>
int ioctl(int fd, FS_IOC_GETFSMAP, struct fsmap_head * arg);

DESCRIERE

Această operație ioctl(2) recuperează schemele de extent fizice pentru un sistem de fișiere. Aceste informații pot fi utilizate, printre altele, pentru a descoperi ce fișiere sunt asociate unui bloc fizic, pentru a examina spațiul liber sau pentru a găsi blocuri defectuoase cunoscute.

Singurul argument pentru această operație ar trebui să fie un indicator către o singură struct fsmap_head:


struct fsmap {

__u32 fmr_device; /* ID-ul dispozitivului */
__u32 fmr_flags; /* Fanioane de cartografiere */
__u64 fmr_physical; /* Poziția segmentului pe dispozitivt */
__u64 fmr_owner; /* ID-ul proprietarului */
__u64 fmr_offset; /* Poziția segmentului în fișier */
__u64 fmr_length; /* Lungimea segmentului */
__u64 fmr_reserved[3]; /* Trebuie să fie zero */ }; struct fsmap_head {
__u32 fmh_iflags; /* Fanioane de control */
__u32 fmh_oflags; /* Fanioane de ieșire */
__u32 fmh_count; /* nr. de intrări în matrice, inclusiv intrarea */
__u32 fmh_entries; /* nr. de intrări completate (ieșire) */
__u64 fmh_reserved[6]; /* Trebuie să fie zero */
struct fsmap fmh_keys[2]; /* Chei joase și înalte pentru
căutarea schemelor */
struct fsmap fmh_recs[]; /* Înregistrări returnate */ };

Cele două elemente ale matricei fmh_keys specifică cea mai mică și cea mai mare cheie de cartografiere inversă pentru care aplicația ar dori informații de cartografiere fizică. O cheie de cartografiere inversă constă în tuple (dispozitiv, bloc, proprietar, poziție). Câmpurile de proprietar și de poziție fac parte din cheie deoarece unele sisteme de fișiere acceptă partajarea blocurilor fizice între mai multe fișiere și, prin urmare, pot returna mai multe corespondențe pentru un anumit bloc fizic.

Schemele sistemului de fișiere sunt copiate în matricea fmh_recs, care urmează imediat datele de antet.

Câmpuri ale struct fsmap_head

Câmpul fmh_iflags este o mască de biți transmisă nucleului pentru a modifica ieșirea. În prezent nu sunt definite fanioane, astfel încât apelantul trebuie să definească această valoare la zero.

Câmpul fmh_oflags este o mască de biți a fanioanelor stabilite de nucleu cu privire la schemele returnate. Dacă FMH_OF_DEV_T este activat, atunci câmpul fmr_device reprezintă o structură dev_t care conține numerele majore și minore ale dispozitivului de blocuri.

Câmpul fmh_count conține numărul de elemente din matricele transmise către nucleu. Dacă această valoare este 0, fmh_entries va fi definit la numărul de înregistrări care ar fi fost returnate dacă matricea ar fi fost suficient de mare; nu va fi returnată nicio informație de cartografiere.

Câmpul fmh_entries conține numărul de elemente din matricea fmh_recs care conțin informații utile.

Câmpurile fmh_reserved trebuie să fie definite la zero.

Chei

Cele două înregistrări cheie din fsmap_head.fmh_keys specifică înregistrările extent cea mai mică și cea mai mare din spațiul cheie pe care apelantul dorește să le primească. Un sistem de fișiere care poate partaja blocuri între fișiere necesită probabil tuple (device, physical, owner, offset, flags) pentru a indexa în mod unic orice înregistrare de cartografiere a sistemului de fișiere. Sistemele de fișiere clasice nepartajate ar putea fi capabile să identifice orice înregistrare doar cu (device, physical, flags). De exemplu, dacă „cheia joasă” este definită la (8:0, 36864, 0, 0, 0), sistemul de fișiere va returna numai înregistrările pentru extent-ele care încep la sau peste 36Kio pe disc. Dacă cheia înaltă este definită la (8:0, 1048576, 0, 0, 0), vor fi returnate numai înregistrările sub 1Mio. Formatul fmr_device din chei trebuie să corespundă formatului aceluiași câmp din înregistrările de ieșire, astfel cum este definit mai jos. Prin convenție, câmpul fsmap_head.fmh_keys[0] trebuie să conțină cheia joasă și fsmap_head.fmh_keys[1] trebuie să conțină cheia înaltă pentru cerere.

Pentru comoditate, dacă fmr_length este definit în cheia joasă, acesta va fi adăugat la fmr_block sau fmr_offset, după caz. Apelantul poate profita de această subtilitate pentru a configura apelurile ulterioare prin copierea fsmap_head.fmh_recs[fsmap_head.fmh_entries - 1] în cheia joasă. Funcția fsmap_advance (definită în linux/fsmap.h) oferă această funcție.

Câmpuri ale structurii fsmap

Câmpul fmr_device identifică în mod unic dispozitivul de stocare subiacent. Dacă fanionul FMH_OF_DEV_T este activat în câmpul fmh_oflags al antetului, acest câmp conține un dev_t din care pot fi extrase numerele majore și minore. Dacă fanionul nu este activat, acest câmp conține o valoare care trebuie să fie unică pentru fiecare dispozitiv de stocare unic.

Câmpul fmr_physical conține adresa de disc a extent-ului în octeți.

Câmpul fmr_owner conține proprietarul extent-ului. Acesta este un număr de nod-i, cu excepția cazului în care FMR_OF_SPECIAL_OWNER este definit în câmpul fmr_flags, caz în care valoarea este determinată de sistemul de fișiere. Pentru mai multe detalii, consultați secțiunea de mai jos privind valorile proprietarului.

Câmpul fmr_offset conține adresa logică din înregistrarea de cartografiere în octeți. Acest câmp nu are nicio semnificație dacă în fmr_flags sunt definite fanioanele FMR_OF_SPECIAL_OWNER sau FMR_OF_EXTENT_MAP.

Câmpul fmr_length conține lungimea extent-ului în octeți.

Câmpul fmr_flags este o mască de biți a fanioanelor de stare ale extent-ului. Biții sunt:

Extent-ul este alocat, dar nu este încă scris.
Acest extent conține date de atribut extinse.
Acest extent conține informații despre harta de extent-uri pentru proprietar.
Părți din acest extent pot fi partajate.
Câmpul fmr_owner conține o valoare specială în loc de un număr de nod-i.
Aceasta este ultima înregistrare din setul de date.

Câmpul fmr_reserved va fi pus la zero.

Valori ale proprietarului

În general, valoarea câmpului fmr_owner pentru extent-ele fără metadate ar trebui să fie un număr de nod-i. Cu toate acestea, sistemele de fișiere nu sunt obligate să raporteze numere de nodur-ii; în schimb, acestea pot raporta FMR_OWN_UNKNOWN dacă numărul de nod-i nu poate fi recuperat cu ușurință, dacă apelantul nu are suficiente privilegii, dacă sistemul de fișiere nu acceptă numere de noduri-i stabile sau din orice alt motiv. În cazul în care un sistem de fișiere dorește să condiționeze raportarea numerelor de noduri-i în funcție de capacitățile procesului, se recomandă insistent utilizarea în acest scop a capacității CAP_SYS_ADMIN.

Spațiu liber.
Acest extent este în uz, dar proprietarul său nu este cunoscut sau nu este ușor de identificat.
Acest extent reprezintă metadatele sistemului de fișiere.

XFS poate returna următoarele valori speciale ale proprietarului:

Spațiu liber.
Acest extent este în uz, dar proprietarul său nu este cunoscut sau nu este ușor de identificat.
Metadate statice ale sistemului de fișiere care există la o adresă fixă. Acestea sunt superblocul AG, AGF, AGFL și anteturile AGI.
Jurnalul sistemului de fișiere.
Metadate ale grupului de alocare, cum ar fi btrees de spațiu liber și btrees de corespondență inversă.
Nodul-i și btree-urile de noduri-i libere.
Înregistrări de noduri-i.
Informații privind numărul de referințe.
Acest extent este utilizată pentru a organiza o copiere la scriere „copy-on-write”.
Acest extent a fost marcat ca fiind defectuos fie de către sistemul de fișiere, fie de către dispozitivul subiacent.

ext4 poate returna următoarele valori speciale ale proprietarului:

Spațiu liber.
Acest extent este în uz, dar proprietarul său nu este cunoscut sau nu este ușor de identificat.
Metadate statice ale sistemului de fișiere care există la o adresă fixă. Acesta este superblocul și descriptorii de grup.
Jurnalul sistemului de fișiere.
Înregistrări de noduri-i.
Harta de biți a blocului.
Harta de biți a nodului-i.

VALOAREA RETURNATĂ

În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

Eroarea plasată în errno poate fi una dintre, dar nu este limitată la, următoarele:

fd nu este deschis pentru citire.
Sistemul de fișiere a detectat o eroare de sumă de control în metadate.
Indicatorul transmis nu a fost asociat cu o adresă de memorie validă.
Matricea nu este suficient de lungă, cheile nu indică o parte validă a sistemului de fișiere, cheia joasă indică un punct mai înalt în spațiul de adrese de stocare fizică al sistemului de fișiere decât cheia înaltă sau a fost trecută o valoare diferită de zero într-unul dintre câmpurile care trebuie să fie zero.
Memorie insuficientă pentru a procesa cererea.
Sistemul de fișiere nu acceptă această comandă.
Metadatele sistemului de fișiere sunt corupte și trebuie reparate.

VERSIUNI

Operația FS_IOC_GETFSMAP a apărut pentru prima dată în Linux 4.12.

STANDARDE

Acest API este specific Linux. Nu toate sistemele de fișiere îl acceptă.

EXEMPLE

Consultați io/fsmap.c în distribuția xfsprogs pentru un program de exemplu.

CONSULTAȚI ȘI

ioctl(2)

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

30 octombrie 2022 Pagini de manual de Linux 6.03