[Résolu][Qst] - Pb de droits sur un script SH

Salutations,

Sur un Raspberry sous Debian, j’ai un bête pb de droits que je ne m’explique pas, alors que tout fonctionnait à merveille au début du mois.

Il s’agit d’un script de sauvegarde du contenu de la SD du Pi vers un disque réseau.

Le partage réseau est up et fonctionnel :

pi@Rasppy ~ $ df -H df: « /root/.gvfs »: Permission non accordée Sys. fich. Taille Util. Dispo Uti% Monté sur rootfs 3,8G 2,2G 1,5G 60% / /dev/root 3,8G 2,2G 1,5G 60% / devtmpfs 226M 0 226M 0% /dev tmpfs 46M 246k 46M 1% /run tmpfs 5,3M 0 5,3M 0% /run/lock tmpfs 92M 0 92M 0% /run/shm /dev/mmcblk0p1 59M 11M 49M 18% /boot //192.168.0.105/Backup/Serveurs/Raspberrys/Rasppy 3,0T 1,4T 1,6T 47% /home/pi/NAS/Backups

Le compte “pi” à les droits en écriture sur ce partage :

pi@Rasppy ~ $ cd /home/pi/NAS/Backups/ pi@Rasppy ~/NAS/Backups $ ls RasppySDCardBackup-20141005.gz RasppySDCardBackup.gz pi@Rasppy ~/NAS/Backups $ mkdir toto pi@Rasppy ~/NAS/Backups $ ls RasppySDCardBackup-20141005.gz RasppySDCardBackup.gz toto pi@Rasppy ~/NAS/Backups $ rmdir toto/ pi@Rasppy ~/NAS/Backups $ ls RasppySDCardBackup-20141005.gz RasppySDCardBackup.gz pi@Rasppy ~/NAS/Backups $

Et le script est dans la home de l’utilisateur :

pi@Rasppy ~ $ ls Desktop indiecity NAS ocr_pi.png runSDCardBackup.sh SDCardBackup.log vncboot

Voici le contenu du script :

[code]#!/bin/sh

Script to backup the SD card of a Pi to the nas.

This should be copied to the /home/pi directory on each Pi and then

set in the crontab to run automatically on a set schedule.

Be sure to pass in a single argument to name the backup file

(e.g. homePiBackup or mediaPiBackup)

Refer here for the original information:

http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html

sudo /etc/init.d/cron stop
sudo bash -c "dd if=/dev/mmcblk0 | sudo gzip > /home/pi/NAS/Backups/RasppySDCardBackup.gz"
sudo /etc/init.d/cron start[/code]

Et voici l’erreur depuis quelques jours :

pi@Rasppy ~ $ ./runSDCardBackup.sh [ ok ] Stopping periodic command scheduler: cron. bash: /home/pi/NAS/Backups/RasppySDCardBackup.gz: Permission non accordée [ ok ] Starting periodic command scheduler: cron. pi@Rasppy ~ $

Cela fait pareil si je le lance depuis le compte root :

root@Rasppy:/home/pi# ls Desktop indiecity NAS ocr_pi.png runSDCardBackup.sh SDCardBackup.log vncboot root@Rasppy:/home/pi# ./runSDCardBackup.sh [ ok ] Stopping periodic command scheduler: cron. bash: /home/pi/NAS/Backups/RasppySDCardBackup.gz: Permission non accordée [ ok ] Starting periodic command scheduler: cron. root@Rasppy:/home/pi#

Avez-vous une idée ?

Bonjour

Peux tu nous donner le résultat de :

De plus, tu lance ton script en sh, puis tu invoque bash, le tout en tand que simple utilisateur, puis 2/3 grands coups de sudo dont:

Ce n’est ni sain ni cohérent puisque l’utilisateur utilise un shell sh, puis invoque sudo, donc l’utilisateur qui obtient les droits root, lance un shell bash avec les droits root :

Et dans ce shell réclame encore les droits root en passant par sudo :

Créé plutôt un simple script bash, sans sudo et avec l’option de débogage (-x ), lance le en root et donnes nous le retour :

[code]#!/bin/bash -x

/etc/init.d/cron stop
dd if=/dev/mmcblk0 | gzip > /home/pi/NAS/Backups/RasppySDCardBackup.gz
/etc/init.d/cron start[/code]

Merci :wink:

Edit : correction après relecture, désolé

quote="Yannou90"
Peux tu nous donner le résultat de :

(…)[/quote]

root@Rasppy:/# mount /dev/root on / type ext4 (rw,noatime,data=ordered) devtmpfs on /dev type devtmpfs (rw,relatime,size=219764k,nr_inodes=54941,mode=755) tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=44788k,mode=755) tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=89560k) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) /dev/mmcblk0p1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime) //192.168.0.105/Backup/Serveurs/Raspberrys/Rasppy on /home/pi/NAS/Backups type cifs (rw,nosuid,nodev,noexec,relatime,vers=1.0,cache=strict,username=backup,domain=Wda,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.0.105,unix,posixpaths,acl,rsize=1048576,wsize=1048576,actimeo=1) gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,relatime,user_id=0,group_id=0) fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)

quote="Yannou90"
Ce n’est ni sain ni cohérent puisque l’utilisateur utilise un shell sh, puis invoque sudo, donc l’utilisateur qui obtient les droits root, lance un shell bash avec les droits root :
(…)[/quote]
Je le conçois à présent, mais ce code est de la recup. comme from the Net…

quote="Yannou90"
Créé plutôt un simple script bash, sans sudo et avec l’option de débogage (-x ), lance le en root et donnes nous le retour :

[code]#!/bin/bash -x

/etc/init.d/cron stop
dd if=/dev/mmcblk0 | gzip > /home/pi/NAS/Backups/RasppySDCardBackup.gz
/etc/init.d/cron start[/code]

Merci :wink:
(…)[/quote]

[code]root@Rasppy:/home/pi# nano runSDCardBackup.sh
root@Rasppy:/home/pi# ./runSDCardBackup.sh

  • /etc/init.d/cron stop
    [ ok ] Stopping periodic command scheduler: cron.
  • gzip
  • dd if=/dev/mmcblk0
    ./runSDCardBackup.sh: ligne23: /home/pi/NAS/Backups/RasppySDCardBackup.gz: Permission non accordée
  • /etc/init.d/cron start
    [ ok ] Starting periodic command scheduler: cron.
    root@Rasppy:/home/pi# [/code]

Je ne vois pas ta carte sd, ou le périphérique correspondant n’existe pas.
Il y a bien :

... /dev/mmcblk0p1 on /boot type vfat ...

Mais alors cela ne correspond pas au périphérique dont tu fais une image :

... dd if=/dev/mmcblk0 ... ...

Ta carte sd était-elle montée lors de ton “mount” ?
Est tu sur du nom du périphérique ?

Assure toi de monter ta carte sd, puis en root un petit :

De nouveau un :

Et pour le fun, soyons fou:

Merci

[code]root@Rasppy:/dev# ls
autofs full loop6 network_throughput ram14 raw tty10 tty20 tty30 tty40 tty50 tty60 vc-cma vcsa
block fuse loop7 null ram15 root tty11 tty21 tty31 tty41 tty51 tty61 vchiq vcsa1
btrfs-control input loop-control ppp ram2 shm tty12 tty22 tty32 tty42 tty52 tty62 vc-mem vcsa2
bus kmsg MAKEDEV ptmx ram3 snd tty13 tty23 tty33 tty43 tty53 tty63 vcs vcsa3
cachefiles log mapper pts ram4 sndstat tty14 tty24 tty34 tty44 tty54 tty7 vcs1 vcsa4
char loop0 mem ram0 ram5 stderr tty15 tty25 tty35 tty45 tty55 tty8 vcs2 vcsa5
console loop1 mmcblk0 ram1 ram6 stdin tty16 tty26 tty36 tty46 tty56 tty9 vcs3 vcsa6
cpu_dma_latency loop2 mmcblk0p1 ram10 ram7 stdout tty17 tty27 tty37 tty47 tty57 ttyAMA0 vcs4 vcsa7
disk loop3 mmcblk0p2 ram11 ram8 tty tty18 tty28 tty38 tty48 tty58 ttyprintk vcs5 xconsole
fb0 loop4 net ram12 ram9 tty0 tty19 tty29 tty39 tty49 tty59 uinput vcs6 zero
fd loop5 network_latency ram13 random tty1 tty2 tty3 tty4 tty5 tty6 urandom vcs7

root@Rasppy:/dev# fdisk -l

Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes
4 heads, 16 sectors/track, 121008 cylinders, total 7744512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb

    Device Boot      Start         End      Blocks   Id  System

/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 7744511 3810816 83 Linux

root@Rasppy:/dev# mount
/dev/root on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=219764k,nr_inodes=54941,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=44788k,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=89560k)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
/dev/mmcblk0p1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime)
//192.168.0.105/Backup/Serveurs/Raspberrys/Rasppy on /home/pi/NAS/Backups type cifs (rw,nosuid,nodev,noexec,relatime,vers=1.0,cache=strict,username=backup,domain=Wda,uid=0,noforceuid,gid=0,noforcegid,addr=192.168.0.105,unix,posixpaths,acl,rsize=1048576,wsize=1048576,actimeo=1)
gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)

root@Rasppy:/dev# cat /etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
//192.168.0.105/Backup/Serveurs/Raspberrys/Rasppy /home/pi/NAS/Backups cifs username=backup,password=xxxxx,workgroup=Wda,users,auto,user_xattr 0 0
root@Rasppy:/dev# [/code]

Bonne fêtes à tous…

Revenons à nos moutons…

C’est donc l’image de ta carte sd que tu compresse puis copies sur ton partage réseau

Peux tu essayer ceci en root :

Une image sans compression :

Une image avec compression :

Merci

root@Rasppy:~# dd if=/dev/mmcblk0 of=/home/pi/NAS/Backups/image.img 7744512+0 enregistrements lus 7744512+0 enregistrements écrits 3965190144 octets (4,0 GB) copiés, 8129,32 s, 488 kB/s root@Rasppy:~# dd if=/dev/mmcblk0 | gzip > /home/pi/NAS/Backups/compress_image.gz 7744512+0 enregistrements lus 7744512+0 enregistrements écrits 3965190144 octets (4,0 GB) copiés, 5255,13 s, 755 kB/s root@Rasppy:~#

Du coups, je ne comprends pourquoi maintenant cela fonctionne…

Par contre, cela ne me sauve en fait que le dossier /boot/ et pas le reste de la SD…

Any idea ?

Je penses que le probleme vient de ta derniere sauvegarde, tu ne peux peut-être pas l’ecraser on va essayer un t’iot truc :

Déplace la derniere sauvegarde, ou renome la :

Puis en root :

Si celà passe utilise ce script à lancer en root :

[code]
#!/bin/bash -x

Enregistrement des logs

exec 2>/home/pi/NAS/Backups/RasppySDCardBackup.log

Stop cron ??

/etc/init.d/cron stop

Sauvegarde du dernier backup

mv -f /home/pi/NAS/Backups/RasppySDCardBackup.gz /home/pi/NAS/Backups/RasppySDCardBackup.last.gz

Sauvegarde de la carte

dd if=/dev/mmcblk0 | gzip > /home/pi/NAS/Backups/RasppySDCardBackup.gz

Start cron ??

#/etc/init.d/cron start

exit $?[/code]

Voilou , tiends nous au jus :wink:


J’avais déjà renommé le fichier via FTP.
Et cela expliquerais que seul le dossier /boot/ est sauvegardé dans l’image ?

Peux tu faire un fdisk -l de ton image :

Image sans compression :

Liste des partition :

Je suis sous Mac, et Mac OS X est capable (Linux oblige) de monter les .img comme images disques.
C’est comme cela que j’ai vu qu’il n’avait sauvé QUE mon dossier /boot/

Un petit fdisk -l ne ferait pas de mal , c est juste pour confirmer

Il va donc falloir que j’attende la fin de la copie actuelle (depuis 2 Jrs) …
En effet, ne trouvant pas d’autres solutions, j’ai tenté de mettre dans mon script runSDCardBackup.sh :

[code]#!/bin/bash -x

/etc/init.d/cron stop
dd if=/dev/full | gzip > /home/pi/NAS/Backups/RasppySDCardBackup.gz
/etc/init.d/cron start[/code]

Et cela tourne depuis 2 Jrs… :

[code]root@Rasppy:/home/pi# dd if=/dev/mmcblk0 of=/home/pi/NAS/Backups/image.img
7744512+0 enregistrements lus
7744512+0 enregistrements écrits
3965190144 octets (4,0 GB) copiés, 8098,88 s, 490 kB/s
root@Rasppy:/home/pi# fdisk -l /home/pi/NAS/Backups/image.img

Disk /home/pi/NAS/Backups/image.img: 3965 MB, 3965190144 bytes
255 heads, 63 sectors/track, 482 cylinders, total 7744512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb

                     Device Boot      Start         End      Blocks   Id  System

/home/pi/NAS/Backups/image.img1 8192 122879 57344 c W95 FAT32 (LBA)
/home/pi/NAS/Backups/image.img2 122880 7744511 3810816 83 Linux
root@Rasppy:/home/pi# [/code]

Et bien ton image est bien complète , et contient tes 2 partition !

Pour t’en assuré tu peux monter les partitions de cette image :

Un petit fdisk -l pour repérer le début des partition :

[code]# fdisk -l /home/pi/NAS/Backups/image.img

Disk /home/pi/NAS/Backups/image.img: 3965 MB, 3965190144 bytes
255 heads, 63 sectors/track, 482 cylinders, total 7744512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb

                     Device Boot      Start         End      Blocks   Id  System

/home/pi/NAS/Backups/image.img1 8192 122879 57344 c W95 FAT32 (LBA)
/home/pi/NAS/Backups/image.img2 122880 7744511 3810816 83 Linux[/code]

On repère 2 partions, une qui débute au secteur 8192 et l’autre au secteur 122880.

On créé les points de montage :

On calcul l’offset en fonction du secteur de départ et de la taille des secteurs:

[quote]/home/pi/NAS/Backups/image.img1 => début secteur 8192 => 8192x512 = 4194304
/home/pi/NAS/Backups/image.img2 => début secteur 122880 => 122880x512 = 62914560[/quote]

Nous connaissons le type de partition, nous pouvons les monter .

Pour l’image de “boot” en fat :

Pour l’image du “systeme” en ext4 :

Et voilou :wink:

root@Rasppy:~# mkdir -p /mnt/{boot,system} root@Rasppy:~# mount -t vfat -o loop,offset=4194304 /home/pi/NAS/Backups/image.img /mnt/boot root@Rasppy:~# mount -t ext4 -o loop,offset=62914560 /home/pi/NAS/Backups/image.img /mnt/system root@Rasppy:~# cd /mnt/system/ root@Rasppy:/mnt/system# ls bin dev home lib media opt root sbin srv tmp var boot etc $HOME lost+found mnt proc run selinux sys usr root@Rasppy:/mnt/system# cd /mnt/boot/ root@Rasppy:/mnt/boot# ls bootcode.bin config.txt fixup.dat issue.txt LICENSE.oracle start.elf cmdline.txt fixup_cd.dat fixup_x.dat kernel.img start_cd.elf start_x.elf root@Rasppy:/mnt/boot#

Bien, donc, il me suffit de mettre :

[code]#!/bin/bash -x

Script to backup the SD card of a Pi to the nas.

This should be copied to the /home/pi directory on each Pi and then

set in the crontab to run automatically on a set schedule.

Be sure to pass in a single argument to name the backup file

(e.g. homePiBackup or mediaPiBackup)

Refer here for the original information:

http://www.stuffaboutcode.com/2012/08/raspberry-pi-auto-backups.html

Enregistrement des logs

exec 2>/home/pi/NAS/Backups/RasppySDCardBackup.log

Stop cron

/etc/init.d/cron stop

Sauvegarde du dernier backup

mv -f /home/pi/NAS/Backups/RasppySDCardBackup.gz /home/pi/NAS/Backups/RasppySDCardBackup.last.gz

Sauvegarde de la carte

dd if=/dev/mmcblk0 | gzip > /home/pi/NAS/Backups/RasppySDCardBackup.gz

Start cron ??

#/etc/init.d/cron start

exit $?[/code]

Cela semble tourner pour l’instant… Wait’n See… Merci :wink:

Puis-je a terme tester de monter les partitions à travers l’archive .gz ou dois-je la décompresser ?

Comment vérifier ma programmation Cron ?

Il est préférable de la décompresser, mais tout dépent de ce que tu souhaite:

  • créer une image de la carte
  • créer une image de chaque partion
  • créer une image du mbr et archiver le contenu de boot et system

  • Libre à toi :wink:

Suivant le script du dessus les logs sont enregistré dans /home/pi/NAS/Backups/RasppySDCardBackup.log

La copie vient de se finir, et voici le contenu du fichier log :

[quote]+ mv -f /home/pi/NAS/Backups/RasppySDCardBackup.gz /home/pi/NAS/Backups/RasppySDCardBackup.last.gz
mv: impossible d’évaluer « /home/pi/NAS/Backups/RasppySDCardBackup.gz »: Aucun fichier ou dossier de ce type

  • dd if=/dev/mmcblk0
    7744512+0 enregistrements lus
    7744512+0 enregistrements écrits
    3965190144 octets (4,0 GB) copiés, 4753,06 s, 834 kB/s
  • exit 0[/quote]

quote=“Yannou90”

(…)[/quote]

[code]root@Rasppy:/home/pi# crontab -l

Edit this file to introduce tasks to be run by cron.

Each task to run has to be defined through a single line

indicating with different fields when the task will be run

and what command to run for the task

To define the time you can provide concrete values for

minute (m), hour (h), day of month (dom), month (mon),

and day of week (dow) or use ‘*’ in these fields (for ‘any’).#

Notice that tasks will be started based on the cron’s system

daemon’s notion of time and timezones.

Output of the crontab jobs (including errors) is sent through

email to the user the crontab file belongs to (unless redirected).

For example, you can run a backup of all your user accounts

at 5 a.m every week with:

0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

For more information see the manual pages of crontab(5) and cron(8)

m h dom mon dow command

30 2 * * 1 /home/pi/runSDCardBackup.sh > /home/pi/SDCardBackup.log 2>&1
root@Rasppy:/home/pi# [/code]

Je ne suis pas sur de bien comprendre la programmation…

Cron execute tous les 1 premiers jours de la semaine à 2h30 : /home/pi/runSDCardBackup.sh > /home/pi/SDCardBackup.log 2>&1

Dans l’ordre par colone :

  • minute
  • heure
  • jour du mois
  • mois
  • jour de la semaine
  • commande

Donc :
30 -> la minute 30
2 -> l’heure 2

  • -> quelque soit le mois
  • -> quelque soit le jour du mois
    1 -> le premier jour de la semaine
    /home/pi/runSDCardBackup.sh > /home/pi/SDCardBackup.log 2>&1 -> la commande éxecutée

En français : le premier jours de toutes les semaines à 2h30 executer /home/pi/runSDCardBackup.sh et enregistrer la sortie standard et d’erreur dans le fichier /home/pi/SDCardBackup.log

Ça te fais 2 fichiers logs, un créé par le script en lui meme : /home/pi/NAS/Backups/RasppySDCardBackup.log
Et un créé par cron : /home/pi/SDCardBackup.log

Désactive l’un ou l’autre …

Si tout est bon tu peux passer le sujet en résolu, à plus :wink:

quote="Yannou90"
Ça te fais 2 fichiers logs, un créé par le script en lui meme : /home/pi/NAS/Backups/RasppySDCardBackup.log
Et un créé par cron : /home/pi/SDCardBackup.log

Désactive l’un ou l’autre …
(…)[/quote]
Que dois-je faire si je veux virer la création du log du cron ?