Come caricare tutto il sistema linux in ram e velocizzare al massimo il pc!




Ciao a tutti in questo articolo vedremo come caricare tutto il sistema operativo linux in ram
per poter ottenere un pc con una velocità incredibile.
Attenzione :
Consiglio vivamente di fare un back up del vostro sistema prima di provare la guida.
Non mi assumo nessuna responsabilità per la perdita dei vostri dati.

Necessario :
--Almeno 8 Gb di ram

--Un sistema operativo debian based , io ho provato su debian 7.02 e debian 6.06
   dovrebbe funzionare anche su Ubuntu e altre distro derivanti da debian.

--Medie conoscenze del teminale linux

Vantaggi:
Alla fine della guida avrete il sistema più veloce che abbiate mai visto !!!
Più veloce di qualsiasi sistema installato su ssd !
Inoltre creeremo una voce del grub che permetterà di caricare il sistema su ram o su hard disk.
Quando sceglierete di avviare su ram tutti i cambiamenti fatti al sistema in questa modalità saranno
dimenticati una volta riavviato.
Questo significa che potrete installare programmi , provare comandi da terminale
ed altre cose simili senza aver paura di corrompere il vostro sistema!!!

Svantaggi:
L'avvio potrebbe richiedere anche 10 minuti a seconda di che hard disk avete e di quanto spazio
occupa il vostro sistema linux.
Durante l'avvio vedrete uno schermo nero con un cursore bianco lampeggiante.
Al riavvio perdete tutti i dati e i cambiamenti che non avete salvato su hard disk
si può evitare questo problema in vari modi che spiegherò più avanti.

Perchè mai mi è venuto in mente di caricare tutto il sistema sulla ram?
Perchè dopo aver comprato ed assemblato i vari pezzi del mio pc questo riusultava non essere
veloce come desideravo .
Il mio pc è così composto :
Amd Phenom 2 X6 Black Edition
Scheda madre asrock 890GX Extreme3
16 GB G.SKILL DDR3 1600
da poco ho aggiunto una Ati 7970xfx Ghost Edition

Dopo aver installato Mint Debian Edition avevo un sistema mediamente veloce
tuttavia avevo composto il pc nella speranza che fosse meglio di "mediamente veloce".
Quindi decisi di provare a capire cosa mi rallentasse il pc in quel modo e alla fine pensai
che probabilmente era dovuto agli hard disk lenti che avevo.
Trovai quindi un post interessante:
http://reboot.pro/topic/14547-linux-load-your-root-partition-to-ram-and-boot-it/

Decisi di provare a seguire la guida .
La prima volta non sembrava essere partito e riavviai
poi capii invece che per copiare tutto il sistema da un hard disk alla ram ci avrebbe messo molto tempo
decisi di spettare con schermo nero sul display per vedere se dopo un pò di tempo sarebbe partito.
Dopo circa 12 minuti il display mi mostrò la schermata di linux e una volta provato il sistema rimasi
molto stupito, era una scheggia!!! era istantaneo!!!
premevo per avviare un qualsiasi programma e appena lasciato il click quello era già a schermo!
Stupendo!

Decisi quindi di fare questa guida.

Perchè mettere sulla ram tutto il sistema operativo velocizza così tanto il pc?
perchè la parte del pc più lenta è l'unica parte meccanica del pc ed è l'hard disk!!!
ogni volta che voi aprite un programma quello viene letto dall'hard disk
anche il più veloce degli hard disk è un collo di bottiglia per gli attuali pc .
Eliminando la lettura e scrittura sull'hard disk si elimina un tempo di attesa lunghissimo!
La ram è molto più veloce di un qualsiasi hard disk la ddr3 va da 6400 MB/s a 12800 MB/s
a seconda del modello mentre un hard disk allo stato solido va da 250 a 600 MB/s
Un hard disk a rotazione invece va da 50 a 150MB/s.
Ora vedete che la velocità della ram DDR3 più lenta è come minimo 42 volte più veloce del più
veloce degli hard disk a rotazione.
Il vostro pc non andrà 42 volte più veloce ma sicuramente la differenza si vedrà
vale davvero la pena il lavoro per ottenerla.

Iniziamo con la guida:

Io sono partito da una versione di debian 7.2 installato da netcd e sulla quale ho installato
il minimo indispensabile e Mate.

Aprite un terminale

scrivete la seguente riga per fare un back up del file fstab :
sudo cp /etc/fstab /etc/fstab.bak

Ora aprite con il vostro editor di testo preferito come amministratori il file :
sudo pluma /etc/fstab oppure sudo gedit /etc/fstab oppure sudo nano /etc/fstab

Cercate la riga dove è presente la partizione di root /

la mia era scritta così:
UUID=b4a375f0-3cae-41ec-a130-fd9fa5207b07 / ext4 noatime,errors=remount-ro 0 0

Assicuratevi che sulla vostra vecchia riga della root sia disabilitato il fsck quindi che ci siano i 2 zeri
come alla fine della mia riga di esempio , se così non fosse sostituire i numeri presenti con 2 zeri
dopodichè riavviare il pc.
Riaprire il file come prima e proseguire.

A questo punto sostituite la riga della root con :
none / tmpfs defaults,noatime,nodiratime,discard 0 0

Salvate e chiudete il file.

Spostatevi dando nel terminale :
cd /usr/share/initramfs-tools/scripts/

Fate una copia del file local con:
sudo cp local local.bak

Aprite il file con il vostro editor di testo come amministratore:
sudo pluma local oppure sudo gedit local oppure sudo nano local

Cercate un pezzo simile a questo:
# FIXME This has no error checking
# Mount root
if [ "${FSTYPE}" != "unknown" ]; then
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
else
mount ${roflag} ${ROOTFLAGS} ${ROOT} ${rootmnt}
fi[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"
run_scripts /scripts/local-bottom
[ "$quiet" != "y" ] && log_end_msg}

In particolare dovreste trovare la riga # Mount root che vi dice che siete nel punto giusto.
Sostituite le righe con le seguenti:
# FIXME This has no error checking
# Mount root
mkdir /ramboottmp
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /ramboottmp
mount -t tmpfs -o size=100% none ${rootmnt}
cd ${rootmnt}
cp -rfa /ramboottmp/* ${rootmnt}
umount /ramboottmp
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"
run_scripts /scripts/local-bottom
[ "$quiet" != "y" ] && log_end_msg
}

A seconda della versione di linux che avete potrebbero cambiare delle righe ma non dovrebbero
differire di molto.

Salvate e chiudete l'editor.

Ora date nel terminale :
sudo mkinitramfs -o /boot/initrd.img-ramboot

Potrebbe darvi due warning ma è normale
A questo punto ripristinate il vecchio local con:
sudo cp -f local.bak local

Aprite il file /boot/grub/grub.cfg con editor di testo come amministratori:
sudo pluma /boot/grub/grub.cfg oppure sudo gedit /boot/grub/grub.cfg

Trovate il primo pezzo di codice che assomigli al mio:
menuentry 'Debian GNU/Linux, con Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd2,msdos1)'
search --no-floppy --fs-uuid --set=root b4a375f0-3cae-41ec-a130-fd9fa5207b07
echo 'Caricamento Linux 3.2.0-4-amd64...'
linux /boot/vmlinuz-3.2.0-4-amd64 root=UUID=b4a375f0-3cae-41ec-a130-fd9fa5207b07 ro quiet
echo 'Caricamento ramdisk iniziale...'
initrd /boot/initrd.img-3.2.0-4-amd64
}

Copiatelo e incollatelo appena più in alto modificandolo poi come segue:

In menuentry aggiungete una scritta che vi faccia sapere che è la voce che carica in ram in sistema:
io ho aggiunto RAM!!! (state attenti a non farla troppo lunga o potrebbe essere un problema)
Poi nella riga dove è scritto :
initrd /boot/qualcosa
sostituite qualcosa con:
initrd.img-ramboot
Il mio menuentry risulta essere questo:
menuentry 'Debian GNU/Linux,Linux3.2.0-4-amd64 RAM!!!' --class debian --class gnu-linux --class gnu --class os {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd2,msdos1)'
search --no-floppy --fs-uuid --set=root b4a375f0-3cae-41ec-a130-fd9fa5207b07
echo 'Caricamento Linux 3.2.0-4-amd64...'
linux /boot/vmlinuz-3.2.0-4-amd64 root=UUID=b4a375f0-3cae-41ec-a130-fd9fa5207b07 ro quiet
echo 'Caricamento ramdisk iniziale...'
initrd /boot/initrd.img-ramboot
}

In patica abbiamo creato un'alta voce del grub uguale ma che invece di partire con :
initrd /boot/initrd.img-3.2.0-4-amd64

parte con
initrd /boot/initrd.img-ramboot

E quindi carica in ram il sistema.

A questo punto salvate e chiudete il file .

Riavviate ed ora dovreste avere nel grub 2 voci simili una delle quali ha RAM!!! nella scritta .

Scegliete quella e dopo 10-15 minuti il vostro sistema sarà partito su ram ed avrete una velocità di
risposta estremamente veloce!

Riavviando e selezionando la voce che non fa partire il sistema in ram potrete avere il vecchio
sistema,tutte le modifiche applicate a questo sistema saranno copiate poi nel sistema in ram.

Io ho la cartella home praticamente vuota e il mio sistema occupa 3,7 Gb quindi a me
basterebbero 6 Gb di ram per far girare il tutto
Perchè 4 Gb li uso per tutti i files di sistema e 2 Gb di ram li uso come ram.
Con 8 gb di ram si dovrebbero far girare quasi tutti i sistemi operativi debian.

Consiglio di non tenere nulla nella home a parte i file di configurazione dei programmi e di salvare
tutti i files di uso comune in una partizione secondaria come faccio io.

Per velocizzare il boot da 15 minuti ad un minuto io uso un hard disk alllo stato solido
che in questo modo riduce di molto il tempo che il pc impiega a caricare il sistema da disco a ram.

Ho scoperto inoltre da poco che funziona la sospensione in ram ed è perfetta perchè in questo
modo il pc lascia alimentata solamente la ram , che così mantiene i dati!
Così in 20 secondi sono di nuovo operativo ed ho tutti i programmi aperti prima della sospensione.

Se avete domande suggerimenti correzioni oppure l'articolo vi è piaciuto commentate!

Condividete l'articolo per migliorare le prestazioni dei pc e aumentare la diffuzione di linux!

        






Comments:

Ivar:


If /home is mounted as a separate partition, I guess only the root and binaries would be copied to ram, so that files in the users home folder would be persistent? In that case, one only needs to boot normally if one wants to change the configuration of the PC.





jose:


Execellent, It works!!!





marco_admin:


Ivar you are right if the /home is mounted as a separate partition then only the binary will be loaded to ram. So the configuration can be modified in the home and will last after the reboot. The negative part is that a program that looks for the configuration in the home partition will read it from hard disk. So the program will be just a little slower than in full ram configuration. I used this type of configuration for a long time but i prefer the full ram mount. Jose thank you for the comment i'm glad to hear that!





vicky:


i only want to run linux as a router...only the static routes need to be persistent..is it possible to make a RAM linux save some config to hard disk and read the config during boot ??





Marco_admin:


Yes is possible! you could make a new partitions mount it as read and write,and then read it at boot time. You could also mount some partitions as read and write like /den or what else and mount all the others partitions in ram But if you need to set some files only one time you could follow my guide..





luca:


Usare sempre gksudo e kdesu per i programmi grafici (a seconda se gtk/qt) mai sudo, perché talvolta crea problemi di permessi che possono perfinmo bloccar eil login in un secondo momento.





luca:


Aggiungere "ldd nomeprogramma" in uno script di avvio (quindi senza copiare niente in RAM) rende istantaneo l'avvio dei programmi, senza attendere ben 10' in fase di boot e senza sprecare preziosa RAM. Questo perché Linux manda in page cache il contenuto del programma e decide se e quali pagine di memoria mantenere in RAM con politica LRU ottimizzata. Quanto alle scritture su disco, si regoli /proc/sys/vm/swappiness che, a dispetto del nome, regola la proporzione tra page cache (copie dei dati del disco mantenute in memoria) e pagine anonime (cioè memoria allocata dai programmi) incrementando la prima a seconda dell'uso che si fa del computer. Questo permette anche di cambiare "profilo" dinamicamente a seconda dell'esigenza.





luca:


(continua) ... e si regoli la mount option "commit" (sia in ext4, sia in btrfs) che stabilisce quanto spesso le modifiche al file system saranno salvate su disco (per ext4 il default è 5' mi pare). Naturalmente fanno eccezione le operazioni di fsync (= aggiornamento dei pacchetti, comando "sync", ecc.) che per natura richiedono un salvataggio istantaneo delle modifiche sul disco. Non ha senso usare un kernel ottimizzato per reggere i server su cui si basa l'infrastruttura Internet, se poi si aggirano le ottimizzazioni del suo memory manager e del buffer manager copiando direttamente tutto in RAM, mi sbaglio?





Tibor Áser Veres:


Here is an Ubuntu version I made: Step 1: Make a copy of your initrd.img just in case... you use a live session to restore it if it won't boot sudo cp /boot/initrd.img-x.x.x-xx-generic /boot/initrd.img-x.x.x-xx-generic.old replace the "x" characters with your system specific numbers... Step 2: Edit: /etc/default/grub in order to see the prompt form normal/ramboot mode... Change: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" >> GRUB_CMDLINE_LINUX_DEFAULT="" Edit it with nano: sudo nano /etc/default/grub Step 3: Run update-grub after changes to take place... sudo update-grub Step 4: Edit: /usr/share/initramfs-tools/scripts/local You may want to use gedit, so that you can search with ctrl+F in the file Find this 2 lines in the script(search for: "# Mount root" FIXME line appears at more places, and it may be temporary until it's fixed...): # FIXME This has no error checking # Mount root Paste this under "# Mount root" line: ### Custom modification starts ### read -t 10 -p 'Do you want to boot normally? (enter Y if so...)' Yy case $Yy in [Yy]* ) clear echo 'Booting normally' mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} ;; *) clear echo 'Booting in RAM' mount -t tmpfs -o rw,noatime,nodiratime,size=100% tmpfs ${rootmnt} mkdir /ramboottmp mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} /ramboottmp cp -rfa /ramboottmp/* ${rootmnt} umount /ramboottmp rm /ramboottmp ;; esac ### End of custom modifications ### Remove or uncomment these lines: mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} Step 5: sudo mkinitramfs -o /boot/initrd.img-x.x.x-xx-generic replace the "x" characters with your system specific numbers... Final step: sudo reboot





Marco_admin:


Ciao Luca grazie per le informazioni aggiuntive!Devo provarle ma sono sicuro che mi saranno molto utili! In ogni caso far partire tutto in ram ha senso se si vuole "smanettare" su linux sapendo che al riavvio si avrà un sistema pulito e ancora funzionante. Inoltre io faccio partire tutto tramite ssd quindi in meno di un minuto parte.. E non mi devo preoccupare di corrompere l'ssd perchè viene letto e basta.. Inoltre se su debian si può cambiare il tipo di scheduler così: echo deadline >/sys/block/sda/queue/scheduler non centra con il memory manager di cui parli tu ma penso aiuti con ssd o ramdisk. In ogni caso proverò la tua guida che sembra molto più mirata grazie ancora!





Marco_admin:


Hello Tibor Áser Veres thank a lot for your guide!!! , i will add it to the main article, which version of ubuntu did you try?





Tibor Áser Veres:


Ubuntu 16.04 LTS, which outgrew my 8GB of ram, after I updated, and installed my frequently used programs... The same procedure I posted works for UbuntuMATE 17.04, And I'm working on a script that does the transformation almost automatically. I'll post it here when I'm done.





Tibor Áser Veres:


Here's a picture of that working: https://drive.google.com/file/d/0By4lbiJ8iarUT1JDVTBYT1ZPVE0/view?usp=sharing





Tibor Áser Veres:


I've promised to post the script when I'm done: https://github.com/RPBCACUEAIIBH/Volatizer Enjoy! :D





Marco_admin:


Thank you for the script Tibor Áser Veres !!! nice work! I hope that using your script even more people will try the awesome experience of ramboot linux system!





Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.