If you want to have all tiles for an entire country, then generally it is best to render them your self. With 2T of disk, you probably can do it for a country, but for the entire world it is not possible, which is why neither the OSM tile server, nor CloudMade have all tiles rendered but render on the fly when tiles are requested (and not yet cached). However that is also why OSM’s tileserver and probably cloudmades too (although I don’t know in that case) won’t like/allow you to download a whole country as it will have to render and store all the tiles for which the majority will never get looked at. http://wiki.openstreetmap.org/wiki/Tile_Disk_Usage gives you an overview of how little actually gets stored for the higher zoom levels. Of cause, most of that is ocean, so the percentage would be higher for a country, but my guess would still be no where close to 100%.

It is not all that bad to set up your own rendering though. E.g. http://wiki.openstreetmap.org/wiki/Mapnik gives an overview of how to set up your own rendering with mapnik and a postGIS database. Alternatively, you might be able to download the entire tiles from cloudmade, but you would need to ask beforehand to check if it is ok.

Actually serving tiles then to users can be done in two ways. If you pre generate all your tiles, you can simply use a standard webserver. The tiles get generated in the directory structure that is used by the webmaps (yourtilserver.com/z/y/x.png). The other method, that the OSM-tileserver uses, is a special apache module mod_tile. It is needed as it both does the tile serving from a disk cache and drive the on-the-fly rendering process where tiles are missing from the cache. Very similar as Tiledrawer.com does it, but doesn’t use Amazon EC2.