LINUX.ORG.RU
ФорумAdmin

Centos7: Как штатно смонтировать iso файл через /etc/fstab при загрузке?

 , , , ,


0

1

ЛОРовцы хелп - голова совсем пухнет, банальную вещь не могу сделать (наверно старческий маразм).

В общем, есть обычный iso файл образа, который надо смонитровать в папку при загрузки системы, в Centos6 все решались добавлением в /etc/fstab строки типа:

/home/iso/CentOS-7-x86_64-DVD-1511.iso /tftpboot/centos/7 iso9660 ro,loop=/dev/loop0 0 0

В Centos7 loop устройств по умолчанию нет, но они автоматически создаются losetup'ом если вызывать mount из консоли, т.е. все монтируется и работает как надо, но при попытке добавить такую надпись и сделать mount -a ругается на то, что loop устройств нет... Так же если перезагрузится с измененным fstab файлом, то система негрузится выпадая в single-mode.

Сделал тупо костылем прописав mount -o loop бла-бла.iso бла/бла в rc.local но это ж костыль...

Киньте плиз маном или покажите куда копать, хочется что бы все через fstab монтировалось при загрузке.

P.S. Гуглить пробовал в основном все решения для старых систем, которое я и так знаю.

Ответ на: комментарий от deadNightTiger

Да, попробовал вписать:

/home/iso/CentOS-7-x86_64-DVD-1511.iso /tftpboot/centos/7 iso9660 ro 0 0

mount -a ничего не пишет, но и ничего не монтируется...

Уверен решение простое и где-то рядом, но уже за целый день голова распухла и не могу увидеть... Может и не в fstab'е дело, а через losetup создавать эти устройства предварительно, только как это делать автоматом при загрузке я невкурил, кроме опять же костыля в rc.local

Kalashmat
() автор топика
Ответ на: комментарий от Kalashmat

Можно создать сервис и в [Install] прописать ему local-fs-pre.target. Тогда он будет запускаться до монтирования.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Kalashmat

Только что попробовал на генту:

до:

/dev/sdb1 on /media/ntfs type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)
/dev/sdb3 on /media/Media type ext4 (rw,noatime,commit=20,data=ordered)
/dev/sdb2 on /media/Docs type ext4 (rw,noatime,commit=20,data=ordered)
/dev/sdb5 on /usr/src type ext4 (rw,relatime,data=ordered)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime)
none on /run/user/1000 type tmpfs (rw,relatime,mode=700,uid=1000)

vlao ~ # mount -a
mount: /dev/loop0 is write-protected, mounting read-only

В итоге:

/dev/sdb1 on /media/ntfs type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)                                        
/dev/sdb3 on /media/Media type ext4 (rw,noatime,commit=20,data=ordered)                                                                               
/dev/sdb2 on /media/Docs type ext4 (rw,noatime,commit=20,data=ordered)                                                                                
/dev/sdb5 on /usr/src type ext4 (rw,relatime,data=ordered)                                                                                            
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime)                                                            
none on /run/user/1000 type tmpfs (rw,relatime,mode=700,uid=1000)
/media/Media/cld-15-x86_64.iso on /mnt/cdrom type iso9660 (ro,relatime)

Так что надо искать проблему у себя. Может модуль loop надо подгружать?

false ★★★★★
()
Последнее исправление: false (всего исправлений: 2)
Ответ на: комментарий от deadNightTiger

записал так:

/home/iso/CentOS-7-x86_64-DVD-1511.iso /mnt/1 iso9660 ro 0 0

mount -a ничего не выводит, mount -va:

/ : ignored /backup : already mounted /mnt/1 : already mounted

ls -la /mnt/1/

rwxr-xr-x 2 root root 4096 май 16 19:52 . drwxr-xr-x. 3 root root 4096 май 16 19:52 ..

Kalashmat
() автор топика
Ответ на: комментарий от false

Да я про генту и не спорю, у меня это всегда работало на центосах 4,5,6 и дебах начиная с «саржа», а тут вот 7-й центос мозги раком поставил... Ядро 3.10.0-327.18.2.el7.x86_64 если что.

Kalashmat
() автор топика
Ответ на: комментарий от anonymous

У тебя Centos7 ?

# grep iso /etc/fstab
/home/iso/CentOS-7-x86_64-DVD-1511.iso /mnt/1 iso9660 loop,ro 0 0
# mount -a
# mount -va
/                        : ignored
/backup                  : already mounted
/mnt/1                   : already mounted
# ls -la /mnt/1/
итого 8
drwxr-xr-x  2 root root 4096 май 16 19:52 .
drwxr-xr-x. 3 root root 4096 май 16 19:52 ..
#
Kalashmat
() автор топика
Ответ на: комментарий от anc

В /proc/mounts так же ничего нет (как и в /etc/mtab) из того что нужно смонтировать:


rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,nosuid,size=3994188k,nr_inodes=998547,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
configfs /sys/kernel/config configfs rw,relatime 0 0
/dev/md127 / ext4 rw,relatime,quota,usrquota,grpquota,data=ordered 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=24,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0
mqueue /dev/mqueue mqueue rw,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
/dev/sdc1 /backup ext4 rw,relatime,data=ordered 0 0
tmpfs /run/user/0 tmpfs rw,nosuid,nodev,relatime,size=800968k,mode=700 0 0

Kalashmat
() автор топика
Ответ на: комментарий от false

девственно чисто... при этом если указать loop устройство в fstab'уе принудительно тогда mount логично ругается:

 mount -a
mount: /home/iso/CentOS-7-x86_64-DVD-1511.iso: failed to setup loop device: Нет такого файла или каталога

а если оставить без указания устройства, т.е.:

/home/iso/CentOS-7-x86_64-DVD-1511.iso /mnt/1 iso9660 loop,ro 0 0

но в ручную создать /dev/loop0 тогда mount -a сразу примонтирует такую запись, т.е. запись синтаксически верная и проблема именно в автоматическом создании loop устройств и этот геморрой возник именно в centos7 т.к. в той же 6-ке сразу после загрузки системы в /dev/ есть куча устройств loop0-7

Kalashmat
() автор топика

Тип файловой системы укажи не iso9660, а udf. Писать loop=... не нужно, само найдёт первый свободный loop-device.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от Kalashmat

Вот блин, ну и кто еще будет говорить о пользе xxxxD ? (это не к вам, а так, личное негодование)
intelfx помогите решить и Эту проблему.

anc ★★★★★
()
Ответ на: комментарий от anc

Я не понимаю, это такая новая когнитивная болезнь — «в любой непонятной ситуации вини systemd»? Топикстартер выше сказал, что после обычного mount -a тоже не работает.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Тип файловой системы укажи не iso9660, а udf.

Чисто интересно. У «лёни» совсем крышак поехал? А че не ext4 ?

anc ★★★★★
()
Ответ на: комментарий от intelfx

Я не понимаю, это такая новая когнитивная болезнь — «в любой непонятной ситуации вини systemd»?

Yes
Ибо это вроде как «система инициализации» которая пришла на смену «старой», ТС пишет что в «старой» все работало (да не только ТС, мнооогие такое пишут) а вот в «новой ххххD» уже и не знают как справиться с примитивной задачей. Согласитесь же, задача у ТС примитивная и ее решение было абсолютно одинаковым и 15 лет назад.
Но вот пришел «ОН» и сказал, Вы все делаете не правильно. Да мы и не против, может быть, но вот проблема, «ОН» забыл сказать «как правильно».
ЗЫ Я вот тоже нифига не xxxD хэйтер, может он и действительно хорош, но вот чего-то подобные проблемы не вызывают яркого желания перейти на него. :(

anc ★★★★★
()
Ответ на: комментарий от anonymous

Вот чего нарыл:

http://www.nefigtut.ru/2014/02/02/where-is-my-dev-loop-files/

По умолчанию модуля кстати нет:

# lsmod |grep loop
#

Можно конечно сделать еще один костаыль но уровне ядра:

# modprobe loop max_loop=8
# ls -la /dev/loop*
brw-rw---- 1 root disk  7,   0 май 17 01:00 /dev/loop0
brw-rw---- 1 root disk  7,   1 май 17 01:00 /dev/loop1
brw-rw---- 1 root disk  7,   2 май 17 01:00 /dev/loop2
brw-rw---- 1 root disk  7,   3 май 17 01:00 /dev/loop3
brw-rw---- 1 root disk  7,   4 май 17 01:00 /dev/loop4
brw-rw---- 1 root disk  7,   5 май 17 01:00 /dev/loop5
brw-rw---- 1 root disk  7,   6 май 17 01:00 /dev/loop6
brw-rw---- 1 root disk  7,   7 май 17 01:00 /dev/loop7
crw-rw---- 1 root disk 10, 237 май 17 01:00 /dev/loop-control

и видимо во время загрузки системы и монтирования из fstab'а этого модуля тоже нет при том, что система поставлена из коробки... вопрос какого х... Но наверное это уже вопрос риторический

Kalashmat
() автор топика
Ответ на: комментарий от intelfx

не нужно, само найдёт первый свободный loop-device.

дык НЕ найдет, потому, что сразу после загрузки их тупо нет...

Kalashmat
() автор топика
Ответ на: комментарий от anc

Да эти грабли по сути мелочи переходные, но иногда ставят раком мозг. Я тут давеча на centos7 secondary ip поднимал (alias который), тоже голова припухла от того что IP адрес вроде, как поднялся (пингуется), а ifconfig -a его не показывает... Оказалось это все для олдфагов, теперь нужно смотреть ip a

Kalashmat
() автор топика
Ответ на: комментарий от Kalashmat

По твоей же ссылке описано, куда делись /dev/loopX файлы и почему это нормально. Подсказка: файл /dev/loop-control там не просто так. Поэтому найдёт, никуда не денется.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от arson

Ребутнул сервак

# uptime
 01:12:46 up 1 min,  1 user,  load average: 0,96, 0,45, 0,16
# lsmod |grep loop
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
# ls -la /dev/loop*
crw-rw---- 1 root disk 10, 237 май 17 01:11 /dev/loop-control

Думаю косяк явно в модуле, точнее в отсутствии его загрузки %)

Kalashmat
() автор топика
Ответ на: комментарий от Kalashmat

Мб ты перестанешь писать чушь? loop-файлы создаются автоматически, модуль loop подгружается автоматически. Если я ничего не забыл, всё, что для этого надо — указывать loop вместо loop=/dev/loopX.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от Kalashmat

ifconfig -a его не показывает... Оказалось это все для олдфагов, теперь нужно смотреть ip a

Не, это уже не к xxxD, еще на всякий случай забудьте про netstat пользуйтесь ss. Добро пожаловать в «новый мир». Хотя я сам его не одобряю, зачем все дальше и дальше разделять *bsd и linux? По старинке всем привычнее, хотя бы обратную совместимость оставляли из каробки... но нет :(

anc ★★★★★
()
Ответ на: комментарий от Kalashmat

Тебе сказали не пиши loop=..., не работает. Просто loop.

arson ★★★★★
()
Ответ на: комментарий от intelfx

Тип файловой системы укажи не iso9660, а udf.

Здесь я не прав, образ действительно iso9660.

intelfx ★★★★★
()
Ответ на: комментарий от Kalashmat

По умолчанию модуля кстати нет

У тебя же граб стоит? Попробуй временно к параметрам ядрышка дописать modules-load=loop и посмотри исчезнет ли проблема.

anonymous
()
Ответ на: комментарий от intelfx

В fstab в этот момент только родные разделы, как я писал выше если написать монтирование .iso-шки то система незагрузится.

P.S. по теме поставить самому - не надо я сам, см по ссылке:

http://savepic.ru/9703996.png

что я делаю не так?

Kalashmat
() автор топика
Ответ на: комментарий от Kalashmat

Ещё раз.

loop-файлы создаются автоматически, модуль loop подгружается автоматически. Если я ничего не забыл, всё, что для этого надо — указывать loop вместо loop=/dev/loopX.

Всё подгрузится, как только ты впишешь в fstab правильную запись.

Чтобы не упасть в rescue mode случайно, напиши ещё параметр nofail (только не забудь убрать потом, но это уже смотри сам — нужно ли тебе строгое поведение системы или нет).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Иван, а не подскажешь? Я создал свой .timer юнит, который проверяет погоду из интернетов и он отлично работает. При загрузке сразу стартует, потому как стоит OnStartupSec=0 и корректно отрабатывает каждый час. Но вот после сна фейлит, потому как загружается раньше того, как становится доступна сеть. По времени потом нормально продолжает запускаться, естественно. То есть он не срабатывает сразу после выхода из сна.

Для создания таймер-юнита понадобилось 3 файла: сам скрипт, файл .timer и файл .service.

Я добавил в файле .timer в секцию Unit строку After=network.target, но таймер-юнит всё равно продолжает фейлить после сна. По логам видно, что он стартует раньше сети:

kernel: PM: Finishing wakeup.
kernel: Restarting tasks ... done.
systemd[1]: Time has been changed
dhcpcd[451]: enp3s0: carrier lost
systemd[467]: Time has been changed
systemd[467]: Started *** МОЙ СКРИПТ ***       <----------------
systemd-sleep[21276]: System resumed.
kernel: r8169 0000:03:00.0 enp3s0: link up
systemd[1]: Started Suspend.
systemd[1]: sleep.target: Unit not needed anymore. Stopping.
systemd[1]: Stopped target Sleep.
systemd[1]: Reached target Suspend.
systemd-logind[322]: Operation 'sleep' finished.
systemd[1]: suspend.target: Unit is bound to inactive unit systemd-suspend.service. Stopping, too.
systemd[1]: Stopped target Suspend.
dhcpcd[451]: enp3s0: deleting route to 192.168.0.0/24
dhcpcd[451]: enp3s0: deleting default route
dhcpcd[451]: enp3s0: carrier acquired
dhcpcd[451]: enp3s0: rebinding lease
dhcpcd[451]: enp3s0: probing address
dhcpcd[451]: enp3s0: leased

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

anonymous
()
Ответ на: комментарий от intelfx

Спасибо человечище! Собрал мозг вкучку, переписал все руками заново и конечно без loop= все загрузилось и подмонтировалось. Странно что я еще днем так пробовал, о чем тут писал: Centos7: Как штатно смонтировать iso файл через /etc/fstab при загрузке? (комментарий) видимо где-то коряво написал, что собственно я и подозревал (надо уже наконец начать высыпаться).

Спасибо всем откликнувшимся!

Kalashmat
() автор топика
Ответ на: комментарий от anonymous

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

Например, сделали мы юнит, состояние которого (active/inactive) «копирует» наличие дефолтного маршрута в системе. Итак, мы уходим в suspend, маршрут исчезает, но сообщение о его исчезновении не успевает дойти до обработчика, потому что Linux — не ОСРВ. Мы просыпаемся, и всё, приехали, получаем гонку между этим сообщением и срабатыванием таймера. Если таймер сработает раньше, то сначала запустится юнит, которому нужна сеть, а уже потом systemd осознает, что сети-то и нет.

Можно, конечно, заставить следить за нетлинком сам systemd, и тогда (наверное) за счёт разнообразных гарантий упорядоченности systemd поймает и обработает сообщение из нетлинка гарантированно раньше, чем событие от таймера. Но — если уйти в suspend, пнув ядро напрямую, то после пробуждения даже само ядро вообще может далеко не сразу обнаружить разрыв подключения. Так что это будет в любом случае не особо надёжно.

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

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)
Ответ на: комментарий от intelfx

Спасибо огромное за подробный ответ и за доброе отношение к анонимусу :) Ты очень хороший человек.

я бы решил это, изменив сам скрипт

Так тогда и сделаю.

anonymous
()
Ответ на: комментарий от anc

ЗЫ Я вот тоже нифига не xxxD хэйтер, может он и действительно хорош, но вот чего-то подобные проблемы не вызывают яркого желания перейти на него. :(

P. S.: Угу. Проблема перехода ядра на динамическое создание петлевых устройств, а также проблема сборки ядра с BLK_DEV_LOOP_MIN_COUNT=0 в новой центоси... правильно, «не вызывает яркого желания перейти на systemd»! Логика.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)

Кому лень писать в терминале команды монтирования-размонтирования образов, могу предложить 2 наутилус-скрипта. Первый, в принципе, если немного подредактировать, можно настроить так, чтобы он монтировал образ по двойному щелчку на нем. Только в текстовом редакторе откройте сначала эти файлики, почитайте мои «тупые комменты», чтобы вопросов не возникало и все ясно было. На сайте http://pc-helpp.com/217-kak-otkryt-iso-fayl-v-windows.html посмотрите об этом инфу более подробно.

Nielouel
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.