There are two ways to get a screen to scroll. The first, called
`hard scrolling', is to leave the text in video memory as it is,
but change the viewing origin. This is very fast. The second,
called `soft scrolling', involves moving all screen text up or
down. This is much slower. The kernel console driver will write
text starting at the top of the video memory, continuing to the
bottom, then copy the bottom part to the top again, and continue,
all the time using hard scrolling to show the right part on the
screen. You can scroll back until the top op the video memory by
using Shift-PageUp (the grey PageUp) and scroll down again using
Shift-PageDown (the grey PageDown), assuming a default keymap.
The amount of scrollback is thus limited to the amount of video
memory you happen to have and you cannot increase this amount. If
you need more scrollback, use some program that buffers the text,
like less or screen - by using a buffer
on disk you can go back to what you did last week. (One can set
the amount of scrollback for xterm by adding a line
like XTerm*saveLines: 2500 in
.Xresources.)
Upon changing virtual consoles, the screen content of the old VT is copied to kernel memory, and the screen content of the new VT is copied from kernel memory to video memory. Only the visible screen is copied, not all of video memory, so switching consoles means losing the scrollback information.
Sometimes, hard scrolling is undesirable, for example when the
hardware does not have the possibility to change viewing origin.
The first example was a Braille machine that would render the top
of video memory in Braille. There is a kernel boot-time option
no-scroll to tell the console driver not to use hard
scrolling. See bootparam(7).