Est-ce que O_DIRECT
contourne la journalisation du système de fichiers?
Habituellement, c'est le cas. Cependant, les données de fichier ne sont généralement pas incluses dans le journal d'un système de fichiers. Plus de détails ci-dessous (mais notez que cette réponse n'essaie pas de rendre compte des systèmes de fichiers CoW):
La plupart des systèmes de fichiers de journalisation Linux (Ext4 lorsque le journal est en écriture différée ou en ordre (par défaut), XFS, JFS, etc.) ne sont pas journalisés les données dans les fichiers - elles consignent la cohérence des structures de données du système de fichiers (métadonnées).
revues Filesystem de métadonnées uniquement (cas typique): données bien dans les fichiers ne vont pas dans le journal de toute façon à l'aide O_DIRECT
ne change pas et les données continuent de ne pas aller dans le journal. Toutefois, les opérations O_DIRECT
peuvent toujours déclencher des mises à jour de métadonnées, comme d'habitude, mais l'opération d'initialisation peut retourner avant la mise à jour des métadonnées. Voir le Ext4 wiki Clarifying Direct IO's Semantics page pour plus de détails.
Ext4 dans le journal = mode de données: C'est plus délicat - il y a un avertissement que le résultat souhaité avec O_DIRECT
en mode journal=data
pourrait ne pas être ce qu'on attend. De l'"data=journal" section of ext4.txt:
Activation ce mode [journal = données] désactive l'allocation retardée et O_DIRECT
soutien.
Dans ce scénario O_DIRECT
est regardé comme seulement un soupçon et le système de fichiers tombe silencieusement à bourrer les données dans le cache de pages (! Rendant plus direct). Donc, dans ce cas, oui, les données finiront dans le journal et le journal ne sera pas ignoré. Voir le fil "Re: [PATCH 1/1 linux-next] ext4: add compatibility flag check" pour où Ted Ts'o articule cela. Il y a des patches qui flottent autour ("ext4: refuse O_DIRECT opens for mode where DIO doesn't work") pour que le système de fichiers retourne une erreur à l'ouverture mais à partir de ce que je peux voir, ils ont été rejetés du noyau de la ligne principale.