2

Я хотел бы использовать неиспользуемую оперативную память другого компьютера в качестве пространства подкачки для моей основной установки Linux. Мне просто было интересно узнать производительность сетевых дисков в сравнении с локальными (медленными) механическими жесткими дисками.

Файл подкачки находится в точке монтирования tmpfs и используется совместно через samba . Тем не менее, каждый раз, когда я пытаюсь выдать:

swapon /mnt/ramswap/swapfile

Я получил:

swapon: /mnt/ramswap/swapfile: swapon failed: Invalid argument

и в dmesg я читаю:

[ 9569.806483] swapon: swapfile has holes

Я пытался выделить файл подкачки с помощью dd if=/dev/zero of=swapfile bs=1024 (but also =4096 and =1048576) и с truncate -s 2G (оба сопровождаются mkswap swapfile), но результат всегда так же.

В этом посте (датированном 2002 годом) кто-то говорит, что использование файла подкачки через NFS/SMB невозможно в Linux. Это утверждение все еще в силе? И если да, то какова причина этого выбора и есть ли обходной путь, чтобы это работало?

3 ответа3

6

Я знаю, что это немного старый поток, но я только что натолкнулся на эту проблему и обнаружил, что можно использовать раздел подкачки NFS, используя устройство обратной связи ядра:

Создайте пустой файл (заполните нулями от /dev /zero):

root@machine:/# dd if=/dev/zero of=/swap bs=1024 count=1048576

Сделайте петли устройства:

root@machine:/# losetup /dev/loop0 /swap

Сделайте его подходящим для обмена:

root@machine:/# mkswap /dev/loop0
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=931d6e04-78ec-41fd-ab2c-22522ac2711d

Теперь используйте это:

root@machine:/# swapon /dev/loop0

Сделать изменение постоянным

Напишите скрипт, чтобы сделать этот обмен постоянным. /etc/init.d/swap может выглядеть так:

#!/bin/sh

set -e

case "$1" in
start)
losetup /dev/loop0 /swap
swapon /dev/loop0
;;
stop)
swapoff /dev/loop0
losetup -d /dev/loop0
;;
restart)
swapoff /dev/loop0
swapon /dev/loop0
;;
*)
echo "Usage: swap { start | stop | restart }" >&2
exit 1
;;
esac

exit 0

Сделайте файл исполняемым:

root@machine:/# chmod +x /etc/init.d/swap

Включить это:

root@machine:/# update-rc.d swap defaults

Источник: http://www.emanuelis.eu/2010/06/21/how-to-swap-to-nfs-mount/

3

Цитировать справочную страницу ...

Это связано с реализацией файла подкачки в ядре, ожидающей возможности записи в файл напрямую, без помощи файловой системы.

Невозможно напрямую записать в монтирование NFS без прохождения через файловую систему, поэтому вы получаете это слегка запутанное сообщение об ошибке.

Как отметил @MattH, вы можете использовать iSCSI для этого, но реальный вопрос в том, стоит ли это вообще. Оперативная память довольно дешева, в конце концов.

1

Если бы вы могли сделать это так, как вы описали, я должен отметить, что вы не используете неиспользуемую оперативную память других машин. Файлы подкачки - это файловая поддержка для локальной оперативной памяти. Вы бы заняли место на жестком диске других машин.

Вы не можете сделать это, потому что Linux имеет специальный тип раздела для подкачки, он должен быть на локальном диске, а не на сетевом ресурсе. Windows не делает это таким образом, она использует только файл в существующей файловой системе. Если я правильно помню, этот файл также должен быть на локальном диске. Так что это не может быть на NFS или SMB.

Тем не менее, я думаю, что вы можете сделать это с iSCSI. Если вы смонтируете целевой объект iSCSI локально и обеспечите обмен внутри него, это может сработать. Это хорошая идея? нет. Я думаю, что это ужасная идея из соображений производительности и надежности. Скорее всего, Linux зависнет, если сеть выйдет из строя и ему потребуется доступ к разделу подкачки. Вы должны получить лучшую производительность с AoE. Но опять же, одна проблема с сетью или с другой машиной, и вас ждет ухабистая поездка.

Просто купите больше оперативной памяти, или, если вы больше не можете уместить, приобретите SSD и создайте на нем раздел подкачки.

РЕДАКТИРОВАТЬ: Хорошо, вы могли бы сделать это. Все еще не рекомендуется, но это один из способов достичь этого в теории.

  1. Создайте tmpfs или ramfs на удаленном хосте.
  2. Отформатируйте tmpfs или ramfs как ext4.
  3. Создайте на нем сырой файл образа диска. (дд или усеченный сделает это)
  4. Экспортируйте образ диска с помощью iscsi или AoE.
  5. На локальном компьютере с Linux подключите целевой компьютер. Затем создайте обмен на цели с помощью mkswap.
  6. Тогда поменяй местами.

Удачи!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .