The hosts were still without the suspended Neymar, with Paco Alcacer taking the place of the Brazilian ace again, while Luis Suarez was left on the bench.
The visitors were minus leg injury victim Nikola Vujadinovic in defence, but Salvatore Sirigu shrugged off a shoulder problem to take his place in goal.
Barca took 11 minutes to break the deadlock, as the visiting defence allowed Lionel Messi to break clear and he went on to lift the ball past the advancing Sirigu for the 501st goal of his Camp Nou career.
Twenty-six minutes in Messi lashed a right-footed shot high over the crossbar from 12 yards out after being set up by Alcacer.
Four minutes later he saw a shot deflected away for a corner, from which the ball was played out to Ivan Rakitic on the right and his cross was planted into the back of the net by Andre Gomes to make it 2-0 to the home side.
Out of nowhere Osasuna were back in the game early in the second half, as a free-kick 25 yards out was curled home superbly by Roberto Torres, with his right-foot effort leaving Marc-Andre ter Stegen rooted to the spot.
A combination of a post and Sirigu prevented Javier Mascherano from heading home to restore the two-goal cushion, before Ter Stegen had to beat away a stinging effort from Torres.
However, it was 3-1 just before the hour mark as Gerard Pique shot against the post after meeting a Rakitic corner and Gomes was in the right place to sweep home the loose ball.
Soon it was 4-1 as Messi fired home from 20 yards after giving far too much time and space, with the Argentinian superstar replaced soon after.
Alcacer guided the ball home at the far post to stretch the lead further and Mascherano was allowed to finally open his account for Barca after around 300 appearances - converting from the penalty spot after Denis Suarez had been fouled.
There was still time for Alcacer to add his second of the game, as the Catalans added further late misery for the visitors.