RHEL5: Imansible creare file scarsetti più grandi di 256GB in tmpfs

/var/log/lastlog viene scritto quando si accede. La dimensione di questo file è basata sul più grande UID del sistema. Maggiore è l'UID massimo, più grande è questo file. Fortunatamente è un file scadente in modo che la dimensione del disco sia molto più piccola rispetto alle size dei report ls -s ( ls -s riport le size sul disco).

Nel nostro sistema stiamo autenticando contro un server Active Directory e gli utenti UID sono assegnati finiscono per essere veramente, veramente grandi. Come, ad esempio, UID 900.000.000 per il primo utente AD, 900.000.001 per il secondo, ecc.

È strano ma va bene. Risulta in /var/log/lastlog essere huuuuuge, anche se – una volta che un utente di AD registra in lastlog presenta come 280GB. Il suo formato reale è ancora piccolo, per fortuna.

Questo funziona bene quando il file /var/log/lastlog è memorizzato sul disco rigido di un filesystem ext3. Tuttavia, si interrompe se il lastlog è memorizzato in un file system tmpfs. Quindi appare che la dimensione massima del file per each file sul tmpfs è di 256 GB, quindi il programma sessreg fuori errori cercando di scrivere in lastlog .

Dov'è questo limite da 256 GB da e da come posso aumentarlo?

Come semplice prova per la creazione di file scarsissimi che ho fatto:

 dd if=/dev/zero of=sparse-file bs=1 count=1 seek=300GB 

Ho provato Googling per la dimensione del file "tmpfs max", "il limite dei file system 256", "la dimensione del file linux max", cose del genere. Non sono stato in grado di trovare molto. La sola menzione di 256GB che posso trovare è che i filesystem ext3 con blocchi 2KB sono limitati ai file da 256 GB. Ma i nostri dischi rigidi sono formattati con blocchi da 4K in modo che non sembra essere – per non parlare di questo sta accadendo in un tmpfs montato sopra il disco rigido in modo che la partizione ext3 non dovrebbe essere un fattore.

Questo succede tutto su un sistema a 64 bit di Red Hat Enterprise Linux 5.4. È interessante notare che, sulla mia macchina per lo sviluppo personale, che è una scatola Fedora Core 6 a 32 bit, posso creare file da 300 GB + in file system tmpfs senza problemi. Nei sisthemes RHEL5.4 non è andata.

  • Accelerare i tempi di caricamento dei pagamenti utilizzando tmpfs
  • Bassa nello spazio in / run
  • Differenza di performance tra ramfs e tmpfs
  • C'è qualcosa di sbagliato nel fare il tuo tmpfs documentroot, se hai il pattino da risparmiare?
  • Come select il file overflow di directory temporaneo di Linux / temp / tmp / temporaneo
  • php script non può accedere a cartella / tmp
  • Miglior modo per memorizzare le sessioni in un modo High Availability / High Performance in ambienti server multipli
  • monitorare IO alla partizione tmpfs?
  • 2 Solutions collect form web for “RHEL5: Imansible creare file scarsetti più grandi di 256GB in tmpfs”

    La risposta è trovata nella sorgente Linux, in particolare, /usr/src/linux/mm/shmem.c , partendo dalla linea 70 del mio sistema (Gentoo 2.6.31-ish):

     /* * The maximum size of a shmem/tmpfs file is limited by the maximum size of * its triple-indirect swap vector - see illustration at shmem_swp_entry(). * * With 4kB page size, maximum file size is just over 2TB on a 32-bit kernel, * but one eighth of that on a 64-bit kernel. With 8kB page size, maximum * file size is just over 4TB on a 64-bit kernel, but 16TB on a 32-bit kernel, * MAX_LFS_FILESIZE being then more restrictive than swap vector layout. 

    Un ottavo di 2 TB è esattamente 256 GB. Le size più grandi sono possibili con un kernel a 32 bit, come è stato scoperto con il tuo sistema di test a 32 bit FC6.

    Sembra che la modifica della dimensione della pagina potrebbe essere correlata all'abilitazione del supporto dei filesystem HugeTLB nel kernel. Tuttavia, non so abbastanza circa le intestine del kernel per dire come o perché, o quali passi che devi prendere per approfittarne di esso, o quali altre implicazioni potrebbero avere. Per abilitarlo, eseguire make menuconfig , passare a File systems e quindi Pseudo filesystems . L'opzione in questione è il supporto del sistema di file HugeTLB . La guida online afferma:

     CONFIG_HUGETLBFS: hugetlbfs is a filesystem backing for HugeTLB pages, based on ramfs. For architectures that support it, say Y here and read <file:Documentation/vm/hugetlbpage.txt> for details. If unsure, say N. 

    Potrebbe valere la pena di eseguire questo anche con StackOverflow. Spero che aiuti.

    Un suggerimento … potresti fare un'image ext3 in tmpfs e montarla, e metteresti l'ultimo file dentro? Qualcosa di simile a:

     cd /tmp dd if=/dev/zero of=lastlog.img bs=1024k count=10 losetup /dev/loop1 lastlog.img mkfs.ext3 /dev/loop1 mount /dev/loop1 /var/lastlog 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.