Backing up a Playstation 3

So in my efforts to get backups of all my devices/computers and have a copy off site, I ran in to a little problem with the PS3. I went to the local Best Buy and bought a couple Seagate portable 2.5 inch USB 3 hard drives. One was a 1TB one for my PS3 and one was a 2TB one for the PS4. The PS4 immediately started working and backed up. Excellent, however the PS3 had a myriad of issues. The first issue is that the drive has to be formatted as FAT32 for the PS3 to be able to read/write to it. Well Windows 7 won’t let you format a drive as FAT32, it only supports NTFS and exFAT (the successor to FAT32). While the PS4 can read/write exFAT the PS3 is stuck on FAT32.

Luckily I have some some Mac’s and was able to format the hard drive as FAT32. Now the PS3 recognized it and I thought my problems with the backup were over. So I started the backup and then left it run. I came back a few hours later (as it said it was going to take 4 hours to do the backup) and saw the error “Unable to access the drive.” Well crap, so I thought it was a fluke and tried to start the backup again. This time it went for about 30 minutes or so and then died again with the same error. I tried it a few more times and each time it died at different parts. Since failure is not an option, but it was getting late, I decided to stop for the evening and pick backup the next day.

On the following day I started doing some google-fu and trying to see what other people were doing for backups on the PS3. Everything I had seen I had already done with the exception of one small sentence from one post on a message board. That sentence is what actually fixed my problem. As you would note from above I bought a USB 3.0 drive (as most are 3 now days vs the 2.) Well this was the actual issue. It appears that the PS3 USB 2.0 ports don’t have enough voltage to power a portable hard drive such as the one I bought. If the drive had external power, I wouldn’t have had the issue. So the solution was to put a powered USB hub in between the PS3 and the USB hard drive. I did that, and presto about 4 hours later the backup was done.

 

Hopefully this will help other people. As for the formatting of the hard drive in FAT 32, if you don’t have a Mac laying around you can download GPartd (which is a Linux ISO) which you can boot and then format the USB drive. (It is available fromhttp://gparted.sourceforge.net/livecd.php.)

Mediatomb and Solaris 10

Now that I rebuilt the server, it was time to put media tomb on it to share media with the PS3. To get it to compile on Solaris (fresh 05/09 Update 7 install patched with the latest security and recommended patches), there are a couple of things you have to do (most of this is from http://blogs.sun.com/constantin/entry/mediatomb_on_solaris with some additional stuff I had to do:

1. Download the latest version of the “file” program from ftp://ftp.astron.com/pub/file/ (my case the current is 5.03)
2. Unzip/untar the file
3. Configure and run make:

gzip -d file-5.03.tar.gz
tar -xvf file-5.03.tar
cd file-5.03
./configure --prefix=/usr/local/file
gmake
su - root -c "gmake install"

3. There are a bunch of other requirements for mediatomb, the easiest way to get them is to use www.blastwave.org. The packages that I installed are:
CSWbdb4
CSWbzip2
CSWcurl
CSWcurlrt
CSWexpat
CSWfaac
CSWfaad2
CSWfconfig
CSWffmpeg
CSWffmpeglib
CSWftype2
CSWgcc3corert
CSWgcc3g++rt
CSWgcrypt
CSWggettext
CSWgpgerr
CSWiconv
CSWid3lib
CSWimlib2
CSWisaexec
CSWlame
CSWliba52
CSWlibid3tag
CSWlibidn
CSWlibnet
CSWlibogg
CSWlibsdl
CSWlibssh2
CSWlibtool
CSWlibtoolrt
CSWlibx11
CSWlibxau
CSWlibxcb
CSWlibxdmcp
CSWncurses
CSWoldaprt
CSWossl
CSWossldevel
CSWosslrt
CSWosslutils
CSWpixman
CSWpng
CSWsasl
CSWsdlmixer
CSWsqlite3
CSWsqlite3dev
CSWstl4
CSWsunmath
CSWtaglibgcc
CSWtheora
CSWtiff
CSWungif
CSWvorbis
CSWxvid
CSWzlib

4. Once these are installed, you can download mediatomb and compile it. http://mediatomb.cc/pages/download

gzip -d mediatomb-0.11.0.tar.gz
tar -xvf mediatomb-0.11.0.tar
cd mediatomb-0.11.0
./configure --prefix=/mediatomb --enable-iconv-lib --with-iconv-h=/opt/csw/include --with-iconv-libs=/opt/csw/lib --enable-libmagic --with-magic-h=/usr/local/file/include --with-magic-libs=/usr/local/file/lib --with-taglib-cfg=/opt/csw/bin/taglib-config --with-curl-cfg=/opt/csw/bin/curl-config --with-sqlite3-libs=/opt/csw/lib --with-sqlite3-h=/opt/csw/include --with-search=/opt/csw --with-id3lib-h=/opt/csw/include --with-id3-libs=/opt/csw/lib
gmake

However before you can run gmake, you need to edit a couple of files. One is the src/main.cc, you need to comment out lines 128 through 141. This is not needed for Solaris. The second file to edit is a result of this:

During the compile I got an error that looked like this:

../src/url.cc:78:53: macro "curl_easy_setopt" requires 3 arguments, but only 2 given
../src/url.cc: In member function `zmm::Ref<zmm ::StringBuffer> URL::download(zmm::String, long int*, CURL*, bool, bool, bool)':
../src/url.cc:78: warning: statement is a reference, not call, to function `curl_easy_setopt'

To fix it edit the src/url.cc file and on line 78 change it from this:

curl_easy_setopt(curl_handle, CURLOPT_NOBODY);

to this :

curl_easy_setopt(curl_handle, CURLOPT_NOBODY, 1);

Then rerun gmake . Once the compile is finished, su to root and do a gmake install, it will place all the media tomb stuff in /mediatomb. (I am using a Zone on a Solaris 10 machine so / has plenty of space).

I then created a user for mediatomb to be run under, so a user and group called mediatmb were created, and all the /mediatomb directories and files were changed to be owned by mediatmb

Once that was done, login as the mediatmb user and create a script in /mediatmb/bin with the following in it:

LD_LIBRARY_PATH=/opt/csw/lib:/usr/local/file/lib:/usr/sfw/lib
export LD_LIBRARY_PATH
./mediatomb --ip x.x.x.x --port 49194 --daemon --pidfile /tmp/mediatomb.pid --logfile=/tmp/mediatomb.log

where x.x.x.x is the IP address of the machine you are running it on. In Constantin’s blog, he mentioned also using the interface, but I found that it had problems since this was a zone. So instead of using the interface, I used the IP address of the zone.

The changes I made to the config.xml in the ~/.mediatomb directory are as follows:

-bash-3.00$ diff orig-config.xml config.xml 
6a7
&gt;       &lt;account user="unixwiz" password="video"/&gt;
23c24
&lt; &lt;protocolInfo extend="no"/&gt;&lt;!-- For PS3 support change to "yes" --&gt;
---
&gt;     &lt;protocolinfo extend="yes"/&gt;&lt;!-- For PS3 support change to "yes" --&gt;
44a46
&gt;     &lt;magic -file&gt;/usr/local/file/share/misc/magic.mgc&lt;/magic&gt;
46a49,50
&gt;       &lt;map from="mpg" to="video/mpeg"/&gt;
&gt;       &lt;map from="JPG" to="image/jpeg"/&gt;
61c65
&lt; &lt;!-- &lt;map from="avi" to="video/divx"/&gt; --&gt;
---
&gt;         &lt;map from="avi" to="video/divx"/&gt;

Now all you have to do is login to the web interface and add the media, following mediatomb’s documentation.

Some interesting things I have found with it:

1. If your PS3 is on wireless it may have problems streaming mp4, but not mpeg2. Weird I know as the mpeg2 was solid streaming at 370kb/s, but it couldn’t handle the mp4. Switching to a hardwired connection fixed that problem.

2. If you happen to be a ReplayTV user [cause TiVO is a wanna be replay 😉 ] you can use MediaTomb in conjunction with DVArchive, which also runs nicely in my Solaris zone. Just point a media directory at the Local_Guide directory and mediatomb will stream every MPEG2 file in that directory to your PS3. Which is pretty damn cool.

3. The PS3 is very pickly about it’s mp4 type files. Some that I made with handbrake don’t work, but ones I did with ffmpegx worked once I put the hardwired connection in.

4. I have not tried any of the transcoding stuff. I would rather do that before and not bog down my server doing that.

5. I need to do a lot of reading on how to make folders and the such so that my collection is organized and not just all under one directory.

For those interested:
My compile environment is setup like this:

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/sfw/bin:/usr/ccs/bin:/usr/local/bin:/opt/csw/bin
SHELL=/bin/tcsh