Я должен все же встретить файловую систему общего назначения на Linux, который пожертвовал бы, переписывают пропускную способность, имеющую непрерывные файлы. Таким образом, каждая файловая система фрагментируют, если части записаны в непоследовательном порядке, особенно с редкими файлами.
Простой способ: Петляйте через клиент потока - предпочтительно что-то, что не предварительно выделяет файл. BitTornado или rtorrent соответствуют этому счету. (У первого есть настраиваемые режимы выделения),
Твердый путь: Разделите исходный файл на части некоторого КБ в размере, переставьте их. Откройте целевой файл. Для каждой части ищите на ее правильное положение и запишите это.
Вот сценарий Perl, который делает это:
#!/usr/bin/perl
use List::Util qw/shuffle/;
use IO::Handle;
use constant BLOCK_SIZE => 4096;
my ($src, $dst) = @ARGV;
my $size = (stat($src))[7];
my @blocks = shuffle(0 .. ($size / BLOCK_SIZE));
my ($srcfh, $dstfh);
open $srcfh, "<", $src or die "cannot open $src: $!";
open $dstfh, ">", $dst or die "cannot open $dst: $!";
truncate $dstfh, $size; # undefined behaviour
my $buf;
for my $blockno (@blocks) {
seek $_, $blockno * BLOCK_SIZE, 0 for ($srcfh, $dstfh);
read $srcfh, $buf, BLOCK_SIZE;
print $dstfh $buf;
$dstfh->flush;
}
close $dstfh;
close $srcfh;
Можно проверить на фрагментацию с filefrag
команда, содержавшаяся в e2fsprogs пакете.
Вот пример того, что делает поток:
# ls -sh amd64memstick-5.1.2.fs.gz
239M amd64memstick-5.1.2.fs.gz
# filefrag amd64memstick-5.1.2.fs.gz
amd64memstick-5.1.2.fs.gz: 585 extents found
Вот то, что я получил со своим сценарием (на ext3):
$ ls -sh source.tar
42M source.tar
$ perl fragment.pl source.tar fragmented.tar
$ md5sum fragmented.tar source.tar
f77fdd7ab526ede434f416f9787fa9b3 fragmented.tar
f77fdd7ab526ede434f416f9787fa9b3 source.tar
# filefrag fragmented.tar
fragmented.tar: 395 extents found
Править: Неважно это, кажется, не работает что много позже всех, за исключением великоватых файлов (файл на 1,5 ГБ фрагменты наверняка.)
Система VM, вероятно, кэширует и откладывает/переупорядочивает слишком маленькие записи. Поэтому клиентам потока удается фрагментировать (так как они обычно не загружают в> 10MB/s), но мой сценарий не делает. Я думаю, что это можно настроить путем понижения vm порогов. Посмотрите /proc/sys/vm/dirty_*
Я использую структуру как:
/var/www/sites/
/var/www/sites/project.com/
/var/www/sites/project.com/includes/
/var/www/sites/project.com/library/
/var/www/sites/project.com/www/
/var/www/sites/project.com/www/index.php
Где /var/www/sites/project.com/www/
установлен как корень документа виртуального хоста, и я использую index.php
включать файлы от library/
& includes/
Таким образом, я организовал свой проект иметь объем PHP за пределами корня документа апача - поскольку Вы надеетесь делать. Так, чтобы сервер не 'блеял' содержание Сценариев PHP и т.д.
Однако - если это - управляемый хостинг, Вы оказываетесь перед необходимостью играть в поле, оттянутом хостом.
Я сказал бы на том же уровне как public_html/
хорошее место состоит в том, чтобы поместить Ваши каталоги с файлами PHP. public_html/
об эквиваленте /var/www/sites/project.com/www/
в моей структуре каталогов в качестве примера.
Относительно природы php/
каталог, возможно, только Ваш хост знает. Если бы это пусто, я сказал бы, что они поощряют Вас использовать его.
На арендованных серверах путь обычно похож на/home/username/public_html, который является корнем виртуальной веб-конфигурации хоста, на которую указывают в в Apache.
Если хостинговая компания поместила каталог PHP там, разногласия, она используется для пользователя определенные параметры конфигурации, такие как php.ini, но стоит согласовать с ними, если это - ваше беспокойство.
Во-вторых, это зависит, если следование коду PHP является доступной сетью или нет. Если бы это, я, вероятно, оставил бы его в/home/username/public_html, если не я создал бы новый каталог под/home/username (/home/username/newdirectory). Идеально для безопасности, Вы могли изменить владельца папки и полномочий, но на общих веб-серверах обычно Вам не дают ту гибкость.